DLL中输出如下函数,其中SCB是结构体
_declspec(dllexport) SCB * CALLBACK WINAPI ss_init(int);
_declspec(dllexport) int CALLBACK WINAPI ss_accept(SCB *);Private Declare Function ss_init Lib "d:\ss.dll" (ByVal sock As Long) As Variant
Private Declare Function ss_accept Lib "d:\ss.dll" (ByRef scb As Any) As Variant
总是报错说DLL调用约定错误,改为下面形式后,又总是发生内存溢出导致VB死机
Private Declare Function ss_init Lib "d:\ss.dll" (ByVal sock As Long) As Long
Private Declare Function ss_accept Lib "d:\ss.dll" (ByRef scb1 As Any) As Long

解决方案 »

  1.   

    vb里面也定义一个结构体,和dll的结构体相同,然后用这个结构体代替“any”试试
      

  2.   

    对于前者,返回的是一个指针,你需要使用CopyMemory函数将其拷贝到VB中定义的SCB类型的变量中,对于后者,只要定义了SCB结构,然后定义 scbl As Any 并且传递一个SCB类型的变量就可以了,但是如果SCB中的结构比较复杂的话可能会导致内存问题,需要首先看看SCB 是怎么定义的。