1

FDTI232RLを使用する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、それもうまくいきません。私は間違った問題に取り組んでいますか?

4

1 に答える 1

2

VB5 では alongは 32 ビットですが、VB.Net では 64 ビットです。関数のパラメーターを、VB.Net で 32 ビットから 32 ビットにlong変更します。int

Private Declare Function FT_ListDevices Lib "FTD2XX.DLL" (ByVal arg1 As Integer, _
        ByVal arg2 As String, ByVal dwFlags As Integer) As Integer
于 2012-12-15T01:52:42.260 に答える