有个c编写的dll,定义如下:
DWORD TEST(
IN OUT BYTE* A,
IN OUT DWORD* B
);
比如dll的名称为X.dll我在vb中定义为
Private Declare Function TEST Lib "C:\WINDOWS\system32\X.dll" (ByVal a As Byte, ByVal b As Integer) As Long
Private Sub Command1_Click()
Dim tmpA As Byte
Dim tmpB As Integer
Dim tmpResult As Long
tmpResult = XC_GetDevState(tmpA, tmpB)
End Sub但是总是报错“ Unhandled exception in ***.exe: 0xC0000005: Access Violation ”
为什么呢?应该怎么调用呢,急!!!!!!
DWORD TEST(
IN OUT BYTE* A,
IN OUT DWORD* B
);
比如dll的名称为X.dll我在vb中定义为
Private Declare Function TEST Lib "C:\WINDOWS\system32\X.dll" (ByVal a As Byte, ByVal b As Integer) As Long
Private Sub Command1_Click()
Dim tmpA As Byte
Dim tmpB As Integer
Dim tmpResult As Long
tmpResult = XC_GetDevState(tmpA, tmpB)
End Sub但是总是报错“ Unhandled exception in ***.exe: 0xC0000005: Access Violation ”
为什么呢?应该怎么调用呢,急!!!!!!
改为
Private Declare Function TEST Lib "C:\WINDOWS\system32\X.dll" (ByRef a As Byte, ByRef b As Integer) As Long
改为
Private Declare Function TEST Lib "C:\WINDOWS\system32\X.dll" (ByVal a As long, ByVal b As long) As Long
Imports System
Imports Microsoft.VisualBasic
Imports System.Runtime.InteropServices
Public Class LibWrap
' Visual Basic does not support varargs, so all arguments must be
' explicitly defined. CallingConvention.Cdecl must be used since the stack
' is cleaned up by the caller.
' int printf( const char *format [, argument]... )
<DllImport("X.dll", CallingConvention := CallingConvention.Cdecl)> _
Overloads Shared Function TEST ( _
a As Byte, b As Long) As Long
End Function
End Class 'LibWrap
Public Class App
Public Shared Sub Main()
Dim a As Byte, B As Long
LibWrap.TEST(a, b)
End Sub 'Main
End Class 'App