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