Public Declare Function GetTime Lib "you.dll" Alias "GetTime" (ComPort as byte,byval DateTime as string) As string试一下
参数中的char *定义为ByVal DateTime As Long,传递参数的时候传StrPtr(xxx) 或者定义为DataTime As Any,传递参数的时候,把变量设置为字节数组,然后传递数组中的第一个 直接定义为As String我没试过哦,应该可以的吧~~~如果不行的话,试试把ByVal改成ByRef,即把传值改为传址返回值是指针类型,即函数类型应该定义为As Long 即返回值为一个指向字符串的内存地址,用CopyMemory复制过来就可以了
Public Declare Function GetTime Lib "you.dll" Alias "_GetTime@8" (ComPort as byte,byval DateTime as Long) As Long你要用C的方式声明你的导出函数,否则编译出来就变成 _GetTime@8这样子的了 extern “C” __declspec(dllexport) char * GetTime(BYTE ComPort,char * DateTime)
你的c++ dll到处函数要这样声明 extern "C" __declspec(dllexport) char * GetTime(BYTE ComPort,char * DateTime) 否则你用普通的C++形式的话,编译器会在编译时更改你的函数名成 _函数名@参数总偏移量 这样的形式 按照你现在的情况, vb声明为 Public Declare Function GetTime Lib "you.dll" Alias "_GetTime@8" (ComPort as byte,byval DateTime as Long) As Long
或者定义为DataTime As Any,传递参数的时候,把变量设置为字节数组,然后传递数组中的第一个
直接定义为As String我没试过哦,应该可以的吧~~~如果不行的话,试试把ByVal改成ByRef,即把传值改为传址返回值是指针类型,即函数类型应该定义为As Long
即返回值为一个指向字符串的内存地址,用CopyMemory复制过来就可以了
我用depends.exe 打开 看了那个DLL库 function里面显示的是
_AddMoney@12
_ClearALLXc@4
_ClearFJSE@8
_ClearJLS@4
_DKGF@12
_FK@16
_Get3JE@20
_GetFJSE@12
_GetJLS@8
_GetLS@16
_GetMaxJH@8
_GetSvrSD@8
_GetSvrTime@8
_GetYe@16
_RealTime@8
_ResetServer@8
_RyXe@12
_Set3JE@20
_SetCJ@8
_SetFJMM@8
_SetKZT@8
_SetMaxJH@8
_SetSDXC@8
_SetSvrTime@4
没有一个叫 GetTime的函数在可以知道的是这个函数跟_GetSvrTime@8有关,请问到底是要引用哪个才对,怎么引用?
extern “C” __declspec(dllexport) char * GetTime(BYTE ComPort,char * DateTime)
extern "C" __declspec(dllexport) char * GetTime(BYTE ComPort,char * DateTime)
否则你用普通的C++形式的话,编译器会在编译时更改你的函数名成 _函数名@参数总偏移量 这样的形式
按照你现在的情况, vb声明为
Public Declare Function GetTime Lib "you.dll" Alias "_GetTime@8" (ComPort as byte,byval DateTime as Long) As Long