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)

解决方案 »

  1.   

    lResult = DonetMd2(ddd, varptr(baBytes), 2) 
      

  2.   

    lResult = DonetMd2(ddd, baBytes, byval 2) 你声明vb方式有问题
    所以必须传值进去
    如果省略byval,程序会认为是去"2"这个地址去取值给程序的
      

  3.   

    Public Declare Function DonetMd2 Lib "QuanraySecurity.dll" (ByVal pSourceBuff As Long, ByVal pResultBuff As Long,byval sLen As Integer) as long 你这样声明就不需要改了,对了这句“lResult = DonetMd2(ddd, baBytes, byval 2)”还需要改下刚才没注意应该改成lResult = DonetMd2(ddd, varptr(baBytes(0)), byval 2)
      

  4.   

    a是在哪里声明的?是怎么声明的?另外,DLL在VC里无返回值,你在VB里该声明为SUB
      

  5.   

    恩,我说的都是小节,陈辉和qingye说的是关键的地方。
      

  6.   

    Public Declare Function DonetMd2 Lib "QuanraySecurity.dll" (ByVal pSourceBuff As Long, ByRef pResultBuff As Long, sLen As Integer) as long
    应该是把一个数组的地址传给指针变量,你不是把数组当常传给指针,所以要用ByRef而不是ByVal不知道对不,试试吧 
      

  7.   

    西西,给你看个API,
    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是用来判断函数是否调用成功的标志.个人见解
      

  8.   

    Public Declare Sub DonetMd2 Lib "QuanraySecurity.dll" (ByRef pSourceBuff As Byte, ByRef pResultBuff As Byte, Byval sLen As long)
    Dim baBytes(63) As Byte a(0) = &H41 
    a(1) = &H41 DonetMd2 a(0), baBytes(0), 2