首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从VB5迁移到VB.NET时遇到了USB .dll调用问题。

从VB5迁移到VB.NET时遇到了USB .dll调用问题。
EN

Stack Overflow用户
提问于 2012-12-15 09:12:30
回答 1查看 354关注 0票数 1

我正在尝试与使用FDTI 232RL的usb设备通信。我已经安装了驱动程序并将.dll调用集成到我的VB5代码中,它工作得很好。我想让它在VB.net上工作,但我得到了PInvokeStackImballance错误消息。在VB5中,我有以下代码序列:

代码语言:javascript
复制
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中:

代码语言:javascript
复制
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,但也不起作用。我是不是解决错了问题?

EN

回答 1

Stack Overflow用户

发布于 2012-12-15 09:52:42

在VB5中,long是32位,而在VB.Net中是64位。将函数中的参数从long更改为int (在VB.Net上为32位)。

代码语言:javascript
复制
Private Declare Function FT_ListDevices Lib "FTD2XX.DLL" (ByVal arg1 As Integer, _
        ByVal arg2 As String, ByVal dwFlags As Integer) As Integer
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13888380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档