还没有用过VB,客户一定要看VB的Demo,,所以请教大家几个问题?
VC 中的原型 :BOOL S3Dsp_GetSupportDev (LPDWORD lpdwDevBits);在VB使用:
Modules:
Declare Function S3Dsp_GetSupportDev Lib "VTDisply.dll" (ByRef lpdwDevBits As Long) As Boolean调用:
Private Sub Command1_Click()
Dim dd As LongS3Dsp_GetSupportDev (dd)
End Sub运行时报错:Bad DLL calling convetion请问要定义成什么类型????才不错啊!!

解决方案 »

  1.   

    修改成:Declare Function S3Dsp_GetSupportDev Lib "VTDisply.dll" (ByVal lpdwDevBits As Long) As Boolean
    Private Sub Command1_Click()
      Dim dd As Long
      S3Dsp_GetSupportDev VarPtr(dd)
    End Sub
      

  2.   

    解释:VC 中的原型 :BOOL S3Dsp_GetSupportDev (LPDWORD lpdwDevBits);
    这个lpdwDevBits实际上传递的是某个DWORD类型变量的地址值。
    转换到VB中时,需要显式地申明成ByVal
    Declare Function S3Dsp_GetSupportDev Lib "VTDisply.dll" (ByVal lpdwDevBits As Long) As Boolean而调用时,需要用VarPtr函数来获取变量的地址值后作为参数值传递给该函数。Private Sub Command1_Click()
      Dim dd As Long
      S3Dsp_GetSupportDev VarPtr(dd)
    End Sub
      

  3.   

    另一种常见做法:
    Declare Function S3Dsp_GetSupportDev Lib "VTDisply.dll" (ByRef lpdwDevBits() As Long) As BooleanPrivate Sub Command1_Click()
      Dim dd(1) As Long
      S3Dsp_GetSupportDev (dd(0))
    End Sub因为数组的结构就是地址指针方式。
      

  4.   

    更正:
    Call S3Dsp_GetSupportDev (dd(0))或S3Dsp_GetSupportDev dd(0)
      

  5.   

    jadeluo(秀峰) :
    用你的这种做法,我在调试的时候,还是错误,但是直接运行exe文件OK,
    不知道是怎么回事情.
      

  6.   

    还请大家看看:
    VC中原型:
             BOOL S3DSP_GETDEVCONNECTIONSTATUS (LPDWORD lpdwDevBits)VB中申明:
    Declare Function S3DSP_GETDEVCONNECTIONSTATUS Lib "VTDisply.dll" (ByVal lpdwDevBits As Long) As Boolean运行时提示: Can't find DLL entry point GETDEVCONNECTIONSTATUS  in VTDisply.dlldll库导出了这个函数啊!!......???