热情软件屋

 

在VB中如何传递指针给DLL


编号:QA000488
建立日期: 1999年2月7日 最后修改日期:2000年10月24日
所属类别:

Albert:
    VB5 SP3
    win95
    我在VC中生成了一个动态库,其中一个函数的参数是一指针,请问: 我在VB中怎么调用?
    

回答:

    VB默认的传递方式就是传指针(ByRef,也就是把变量的地址传递给所调用的函数)。如果要传值(也就是把变量的值传递给所调用的函数)反要在参数声明前加ByVal。所以如果你传递的参数是普通的数据类型,在参数前什么都不要加就行了。如C语言声明为:
    void __stdcall MyProc(short * nPara);
    则VB声明为:
    Declare Function MyProc Lib "MyDll.dll" (nPara As Integer)
    调用时同普通函数。
    如果C语言中的指针是字符串指针,那么在VB声明时需要加上ByVal,这是个例外。如C语言声明为:
    void __stdcall MyProc(char * sPara);
    则VB声明为:
    Declare Function MyProc Lib "MyDll.dll" (ByVal sPara As String)
    调用时同普通函数。
    如果C语言的指针是数组指针,则在VB中调用时应将数组的首元素传递给DLL。如C语言声明为:
    void __stdcall MyProc(int [] arrPara);
    则VB声明为:
    Declare Function MyProc Lib "MyDll.dll" (nPara As String)
    调用时为MyProc A(0)。
    注意:不能直接传递数组名,因为如果传递数组名,VB实际会传一个复杂的结构类型给DLL,这对编写C语言的DLL来说,处理这样的结构比较麻烦,所以通常都不支持这种方式。
    
    冯桦的意见:
    VB调用DLL时,以Byval方式传递字符串参数的类型是BSTR(主持人注:BSTR的处理方法同char *),以Byref方式传递字符串参数的类型是BSTR*。下面是以Byref方式传递参数的例子:
    void _stdcall PassString(BSTR* pbstr)
    {
     LPSTR ss="Modify parameter in DLL";
     //对pbstr重新分配内存
     SysReAllocStringLen(pbstr,(BSTR)ss,strlen(ss));
    }

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio