我用VC开发了一个常规动态连接库.
其中某输出函数的参数为char* : 
extern "C" __declspec(dllexport) void OpenMyFile(char* strFile);在VB中我是如下用的:
...
Private Declare Function OpenMyFile Lib "Capturer.dll" (ByVal strFile As String) As Long
...在打开文件按钮的事件中:
Dim sFile As String
sFile = "C:\\a.avi"
OpenMyFile sFile         // 此语句报错!!!!!!!!!!!!!!!!!!!!!!!!!!1
...大侠们 help.注: 我用VC调用该动态库无任何问题.

解决方案 »

  1.   

    VC的字串和VC的有什么不同吗?
      

  2.   

    你vc要得到的是指向字符串的指针,所以申明的时候应该用ByRef。如下:
    Private Declare Function OpenMyFile Lib "Capturer.dll" (ByRef strFile As String) As Long
      

  3.   

    指针类型声明的是要用BYREF(按地址传送)
      

  4.   

    谢谢诸位大侠:
    还有个入门级问题:
    对一个按钮Click操作而有系统产生的代码中有默认的参数(Index As Integer)是什么意思?
      Private Sub Command30_Click(Index As Integer)   // 
      
      End Sub
    这里的Index As Integer是什么意思啊?
    ???
      

  5.   

    VC中的输出函数应为__stdcall调用.
      

  6.   

    关键是函数导出约定楼上说的是对的_stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。 2、C调用约定(即用__cdecl关键字说明)按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数的函数只能使用该调用约定)。另外,在函数名修饰约定方面也有所不同。VB只支持_stdcall现在知道了吗
      

  7.   

    Private Sub Command30_Click(Index As Integer)   
      
    End Sub
    因为你定义了一个控件数组   index 为索引