VC的函数是:
long SystemInit(int nBaudRate,int nPorts,ShakeHandAnswer* data,int nTimeout=1500);
结构体定义:
struct ShakeHandAnswer {
BYTE byProtocolType;
BYTE byPhoneType;
char chFactoryCode[11];
char chVersion[5];
BYTE byPhoneFunc; }我用VB是这样写的:
结构体:Private Type ShakeHandAnswer
           byProtocolType As Byte
           byPhoneType As Byte
           chFactoryCode(0 To 10) As String
           chVersion(0 To 4) As String
           byPhoneFunc As Byte
        End Type
函数声明:
Private Declare Function SystemInit Lib "shortmessage.dll" (ByVal nBaudRate As Integer, ByVal nPorts As Integer,ByRef data As ShakeHandAnswer, Optional ByVal nTimeout As Integer = 1500) As Long
函数调用:
Dim p As ShakeHandAnswer
Print SystemInit(9600, 1, p)
程序运行后系统崩溃,有内存溢出,请问这是什么原因?请高手帮忙!

解决方案 »

  1.   

    ShakeHandAnswer* data也应该相当于一个long,事实是结构的地址data As long   (前面byref和byval都试试,不确定)传值的时候传varptr(p)
      

  2.   

    还是有“内存溢出的问题”,传值给VC的dll好像可以实现,但返回时出现问题。
      

  3.   

    首先修改一下结构:
    Private Type ShakeHandAnswer
               byProtocolType As Byte
               byPhoneType As Byte
               chFactoryCode(0 To 10) As Byte
               chVersion(0 To 4) As Byte
               byPhoneFunc As Byte
    End Type然后修改一下函数定义:
    Private Declare Function SystemInit Lib "shortmessage.dll" (ByVal nBaudRate As Long, ByVal nPorts As Long,data As Any, Optional ByVal nTimeout As Long= 1500) As Long