C++编写的DLL文件,我想用VB调用,但是其中有一个函数,其原型为:
extern "C"HANDLE PASCAL EXPORT UssdLogin(char szAccountName[],char szPassword[], int *pnErrorCode, BOOL fAutoConnect,DWORD dwTimeOut);C语言头文件声明如下:
void * PASCAL EXPORT UssdLogin(char szAccountName[],char szPassword[],int *pnErrorCode,int fAutoConnect,unsigned long dwTimeOut);函数返回值
一个登录实例句柄请问如何将其转为VB的声明。

解决方案 »

  1.   

    void *从类型兼容上可以定义成LongPascal调用方式的DLL,在VB当中无法使用.
      

  2.   

    假设你的DLL名字为YourDLL.DLL:Private Declare Sub UssdLogin Lib "YourDLL.dll" (ByVal lPszAccountName As String, ByVal lPszPassword As String, ByRef pnErrorCode As Long, ByVal fAutoConnect As Long, ByVal dwTimeOut As Long)
      

  3.   

    有返回值,肯定不是Sub了,还是问问1楼僵哥吧
      

  4.   

    在C中声明要void _stdcall EXPORT UssdLogin(char szAccountName[],char szPassword[],int *pnErrorCode,int fAutoConnect,unsigned long dwTimeOut); 
    这样VB才可以调用,
    VB模块中声明
     Declare Function UssdLogin Lib "YourDLL.dll" (ByVal lPszAccountName As byte, ByVal lPszPassword As byte, ByRef pnErrorCode As Long, ByVal fAutoConnect As Long, ByVal dwTimeOut As Integer) as long
    VB调用
    dim st as long
    st=UssdLogin(你的参数)
    如里有返回值用Function,没有返回值用Sub
      

  5.   

    void *是一个无类型指针,C语言里的指针只与操作平台有关,如32位的XP,指针长度为4个字节,即VB的LONG,在C++里,有一种比较特殊的指针,即类指针,由于存在虚类,故类指针可能大于32位。因此,如果不考虑类指针,void *、char *、int *等,其实质都一样,都是32位,即俺们常说的4G内存地址,都可以声明为ByVal xx As Long,它们的区别只是用于编译器的查错处理,在完成声明后,再使用CopyMemory API实现指针内容的读写就可以了。
      

  6.   

    返回那void*你用long存储之后还要调用CopyMemory拷贝出来