【问题标题】:How to use powershell to get device info using FT_ListDevices of FTDI D2XX drivers library如何使用 FTDI D2XX 驱动程序库的 FT_ListDevices 使用 powershell 获取设备信息
【发布时间】:2016-02-18 05:04:07
【问题描述】:

我正在使用 FT245R USB 转并行 FIFO 接口设备。该芯片使用 FTDI D2XX 库。我正在使用 powershell 和 DllImport 来加载和访问库函数。我在使用 FT_ListDevices 函数时遇到问题。该设备的参考和示例可以在下面的链接中找到。请参阅第 11、12 页和第 13 页的一部分

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

$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·韦德

【问题讨论】:

    标签: powershell dllimport ftdi d2xx


    【解决方案1】:

    您是否使用 64 或 x86 版本的 PowerShell 来运行代码?我之前也遇到过类似的问题,因为驱动程序在运行“错误”位版本的 PowerShell 时找不到设备。

    【讨论】:

    • 感谢您的快速回复。我目前正在运行 64 位版本的 Powershell。 D2XX 驱动程序带有 64 位和 32 位。我确实重新加载了驱动程序只是为了确保正在使用 64 位。 J.韦德
    • Negorath,我试图投票赞成你的答案,但我没有足够的声望点。我不经常这样做,所以我不会投入必要的活动来增加我的声望点。再次感谢你。 J.韦德
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多