0

FT245R USB to Parallel FIFO Interface Device を使用しています。チップは FTDI D2XX ライブラリを使用します。ライブラリ関数を読み込んでアクセスするために、powershell と DllImport を使用しています。FT_ListDevices 関数の使用に問題があります。デバイスのリファレンスと例は、以下のリンクにあります。11ページ、12ページ、13ページの一部参照

http://www.ftdichip.com/Support/Documents/ProgramGuides/D2XX_Programmer's_Guide(FT_000071).pdf _

同僚と私は 2 番目の例を機能させることができましたが、3 番目の例はうまくいきませんでした。以下は動作するコードです。3 番目の例は以下の例と似ていますが、以下の作業コードのようにバイト配列の代わりに配列の配列を使用しています。

#2. Get serial number of first device
$FT_LIST_BY_INDEX = '0x40000000'
$FT_OPEN_BY_SERIAL_NUMBER = 1

$numDevs = 0

$SerialNumber = New-Object byte[] 64

$run=@'
[DllImport("FTD2XX.dll")] static public extern UInt32 FT_ListDevices(System.IntPtr pvArg1, byte[] pvArg2, System.UInt32 dwFlags);
'@
$typef = Add-Type -MemberDefinition $run -Name "ListDevices" -PassThru
$typef::FT_ListDevices($numDevs, $SerialNumber, $FT_LIST_BY_INDEX -bor $FT_OPEN_BY_SERIAL_NUMBER)
[System.Text.Encoding]::ASCII.GetString($SerialNumber)

例 3 を機能させる最善の試みを以下に示します。

#3. Get device descriptions of all devices currently connected
$FT_LIST_ALL = '0x20000000'
$FT_OPEN_BY_SERIAL_NUMBER = 1
$FT_OPEN_BY_DESCRIPTION = 2
$numDevs = 0
$TotalnumDevs = 2

[Byte[][]]$BufferPtrs = (,([Byte[]] (,"" * 64)))*$TotalnumDevs
[Byte[][]]$BufferPtrs += ,""

$run=@'
[DllImport("FTD2XX.dll")] static public extern UInt32 FT_ListDevices(Array BufferPtrs, ref UInt32 pvArg2, UInt32 dwFlags);
'@
$typef = Add-Type -MemberDefinition $run -Name "ListDevices1" -PassThru
$ftStatus = $typef::FT_ListDevices($BufferPtrs, [ref] $numDevs, $FT_LIST_ALL -bor $FT_OPEN_BY_DESCRIPTION)
'(FT_OK = 0) ftStatus = ' + [string]$ftStatus
'Number of Devices = ' + [string]$numDevs
[ref] $BufferPtrs    #Display the Pointers Array
$BufferPtrs.GetType()

したがって、ここでの目標は、DLLimport ステートメントで Array を Byte[][] に変更することですが、
これはエラーになります。. .

エラー: 「ネストされた配列のマーシャリング サポートはありません」

いくつかの調査を行い、カスタム マーシャリングを使用しようとしましたが、別のエラーが発生しました。

エラー: 「型または名前空間名 'ICuztomMarshaler' が見つかりませんでした」

これを機能させるには、ジャグ/ネストされた配列をライブラリに送信できる必要があります

どうぞよろしくお願いいたします。J・ウェイド

4

1 に答える 1

0

コードの実行に PowerShell の 64 または x86 バージョンを使用していますか? 「間違った」ビット バージョンの PowerShell を実行しているときにドライバーがデバイスを見つけられなかったため、以前にも同様の問題が発生しました。

于 2016-02-18T05:45:06.427 に答える