VC中做的DLL
DllAPI void __stdcall DonetMd2(byte * pSourceBuff,byte *pResultBuff ,int len)我在C#中这样定义的可以用
[DllImport("QuanraySecurity.dll", EntryPoint = "DonetMd2", SetLastError = true)]
public static extern void Md2(char[] source, byte[] result, int len);VB里现在我这样定义
Public Declare Function DonetMd2 Lib "QuanraySecurity.dll" (ByVal pSourceBuff As Long, ByVal pResultBuff As Long, sLen As Integer) as long
现在我调用的时候老是出现内存报错,不知道哪里有问题Dim i As Integer
Dim baBytes(63) As Byte
Dim ddd As Long
Dim lResult As Long
For i = 0 To 63
baBytes(i) = &H0
Next'ccc = VarPtr(baBytes(0))a(0) = &H41
a(1) = &H41
ddd = VarPtr(a(0))lResult = DonetMd2(ddd, baBytes, 2)
DllAPI void __stdcall DonetMd2(byte * pSourceBuff,byte *pResultBuff ,int len)我在C#中这样定义的可以用
[DllImport("QuanraySecurity.dll", EntryPoint = "DonetMd2", SetLastError = true)]
public static extern void Md2(char[] source, byte[] result, int len);VB里现在我这样定义
Public Declare Function DonetMd2 Lib "QuanraySecurity.dll" (ByVal pSourceBuff As Long, ByVal pResultBuff As Long, sLen As Integer) as long
现在我调用的时候老是出现内存报错,不知道哪里有问题Dim i As Integer
Dim baBytes(63) As Byte
Dim ddd As Long
Dim lResult As Long
For i = 0 To 63
baBytes(i) = &H0
Next'ccc = VarPtr(baBytes(0))a(0) = &H41
a(1) = &H41
ddd = VarPtr(a(0))lResult = DonetMd2(ddd, baBytes, 2)
所以必须传值进去
如果省略byval,程序会认为是去"2"这个地址去取值给程序的
应该是把一个数组的地址传给指针变量,你不是把数组当常传给指针,所以要用ByRef而不是ByVal不知道对不,试试吧
Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Longvc 调用方式,没有返回值
WritePrivateProfileString( "appname ", "name ", "testname ",GetININame()); vb中很多情况下使用function是用来判断函数是否调用成功的标志.个人见解
Dim baBytes(63) As Byte a(0) = &H41
a(1) = &H41 DonetMd2 a(0), baBytes(0), 2