我用的是VB6.0 Dll是VC6.0写的 
函数在VC的声明方式为extern "C" _declspec(dllexport) void ConvertXYZ(double L, double B,bool OutJWD,double &x,double &y,double &z) 
我在VB里的引用方式为Private Declare Function ConvertXYZ Lib "JZDLL.dll" (ByVal L As Double, ByVal B As Double, ByVal OutJWD As Boolean, ByRef x As Double, ByRef y As Double, ByRef z As Double) 
调用方式为 
    Dim x As Double 
    Dim y As Double 
    Dim z As Double 
    x = 20 
    y = 20 
    z = 5 
  
    
  ConvertXYZ 120, 30, False, x, y, z 
报告错误如下     Visual studio 实时调试器 
      Vb6.exe【3020】中发生未处理的Win32异常 
然后要选择调试器 
各位大侠,不吝赐教

解决方案 »

  1.   

    1
    extern "C" _declspec(dllexport) void __stdcall ConvertXYZ(......2
    Private Declare Sub ConvertXYZ Lib "JZDLL.dll" (ByVal L As Double, ByVal B As Double, ByVal OutJWD As Long, ByRef x As Double, ByRef y As Double, ByRef z As Double)
      

  2.   

    1)VC 函数要声明为 stdcall 方式
    2)VC 参数 double & 要换成 double *(有点记不得了——可能要)
    3)VB 要声明为 Sub,默认的 Function 是返回一个 Variant,明显不匹配。
    4)VC 的 bool 是不是 4 字节?所以 VB 中要用 Long,Boolean 是两字节,而且 {False,True} 是 {0,-1} 而不是 {0,1}。