我正在尝试与使用FDTI 232RL的usb设备通信。我已经安装了驱动程序并将.dll调用集成到我的VB5代码中,它工作得很好。我想让它在VB.net上工作,但我得到了PInvokeStackImballance错误消息。在VB5中,我有以下代码序列:
Private Declare Function FT_ListDevices Lib "FTD2XX.DLL" (ByVal arg1 As Long, ByVal arg2 As String, ByVal dwFlags As Long) As Long
...
Dim strSerialNumber As String * 256
...
LoggerList.AddItem ("ListDevices by S/N")
If FT_ListDevices(0, strSerialNumber, FT_LIST_BY_INDEX Or FT_OPEN_BY_SERIAL_NUMBER) <> FT_OK Then
...在VB.NET中:
Private Declare Function FT_ListDevices Lib "FTD2XX.DLL" (ByVal arg1 As Long, ByVal arg2 As String, ByVal dwFlags As Long) As Long
...
Dim strSerialNumber As Stringbuilder new = stringbuilder (" ",256)
...
LoggerList.AddItem ("ListDevices by S/N")
If FT_ListDevices(0, strSerialNumber, FT_LIST_BY_INDEX Or FT_OPEN_BY_SERIAL_NUMBER) <> FT_OK Then
...错误发生在if语句中。是否需要使用import("FTD2XX.dll")导入Dll?我也尝试过Dim strSerialNumber(256) as char,但也不起作用。我是不是解决错了问题?
发布于 2012-12-15 09:52:42
在VB5中,long是32位,而在VB.Net中是64位。将函数中的参数从long更改为int (在VB.Net上为32位)。
Private Declare Function FT_ListDevices Lib "FTD2XX.DLL" (ByVal arg1 As Integer, _
ByVal arg2 As String, ByVal dwFlags As Integer) As Integerhttps://stackoverflow.com/questions/13888380
复制相似问题