Я использую USB-устройство FT245R для параллельного интерфейса FIFO. Чип использует библиотеку FTDI D2XX. Я использую powershell и DllImport для загрузки и доступа к библиотечным функциям. У меня возникла проблема с использованием функции FT_ListDevices. Ссылка и примеры для устройства можно найти по ссылке ниже. См Страницы 11, 12 и часть 13Как использовать powershell для получения информации об устройстве с помощью FT_ListDevices библиотеки драйверов FTDI D2XX
http://www.ftdichip.com/Support/Documents/ProgramGuides/D2XX_Programmer «s_Guide (FT_000071) .pdf
Коллега и я были в состоянии получить второй пример работы, но нам не удалось получить третий , Ниже приведен код, который работает. Третий пример аналогичен приведенному ниже примеру, однако он использует массив массивов вместо массива Byte, как в рабочем коде ниже.
#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
[email protected]'
[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 += ,""
[email protected]'
[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()
Таким образом, цель здесь заключается в изменении массива в Byte [] [] в заявлении DllImport, но
это приведет к ошибке. , ,
ОШИБКИ: «Там нет поддержки сортировочной для вложенных массивов»
Я сделал некоторые исследования и пытался использовать пользовательский сортировочный, но это привело к другой ошибке.
ОШИБКА: «Тип или пространство имен имя„ICuztomMarshaler“не может быть найден»
мне нужно, чтобы иметь возможность отправить Jagged/вложенной массив в библиотеку, чтобы получить эту
работать.
Пожалуйста, помогите и благодарите вас заранее. J. Wade
Благодарим вас за быстрый ответ. В настоящее время я запускаю 64-битную версию Powershell. Драйверы D2XX поставляются с 64 и 32 бит. Я перезагрузил драйверы, чтобы убедиться, что используется 64 бит. J. Wade – user2981057
Negorath, я попытался проголосовать за ваш ответ, но у меня недостаточно очков репутации. Я не делаю этого очень часто, поэтому я не инвестирую требуемую деятельность, чтобы увеличить свои очки репутации. Еще раз спасибо. Дж. Уэйд – user2981057