调用dll中的函数,该如何解决
调用dll中的函数
在VC中调用dll中的带有返回值的函数,如何得到这个返回的值。请高人赐教,最好带个小例子,小弟在此先谢过了。比如说这个函数返回一个字符串,那么在VC中怎么得到这个字符串。
------解决方案--------------------
和普通函数没有区别
CString str=fun1();
------解决方案--------------------
比如,调用user32.dll中的IsHungAppWindow函数,其原型是
BOOL WINAPI *IsHungAppWindow(HWND);
下面是调用方法
typedef BOOL (WINAPI *PROCISHUNGAPPWINDOW)(HWND);
PROCISHUNGAPPWINDOW IsHungAppWindow; // 前面是函数指针声明
IsHungAppWindow = (PROCISHUNGAPPWINDOW) GetProcAddress(GetModuleHandle(_T( "user32 ")), "IsHungAppWindow "); // 查询函数指针
BOOL fHung = IsHungAppWindow(hWnd); // 调用并返回值
------解决方案--------------------
比如说你现在有个dll文件为 ****.dll, 导出函数为CString GetString();
具体代码:
typedef CString (* DLLFUN)();
DLLFUN MainFun;
HINSTANCE hDll;
hDll = LoadLibrary(_T( "****.dll "));
CString strMy;
if(hDll)
{
MainFun = (DLLFUN)GetProcAddress(hDll, _T( "GetString "));
strMy = MainFun();
}
------解决方案--------------------
呵呵,如果函数返回的是字符指针,而不是字符串对象,情况就要复杂一点,这里就涉及到不同模块之间堆内存的分配和释放的问题。
------解决方案--------------------
x = Proc(...);
LoadLibrary-> GetProcAddress-> call function
取返回值与调用一般的函数没有什么区别。
当然不同堆的内存分配与释放的问题得注意了。
在VC中调用dll中的带有返回值的函数,如何得到这个返回的值。请高人赐教,最好带个小例子,小弟在此先谢过了。比如说这个函数返回一个字符串,那么在VC中怎么得到这个字符串。
------解决方案--------------------
和普通函数没有区别
CString str=fun1();
------解决方案--------------------
比如,调用user32.dll中的IsHungAppWindow函数,其原型是
BOOL WINAPI *IsHungAppWindow(HWND);
下面是调用方法
typedef BOOL (WINAPI *PROCISHUNGAPPWINDOW)(HWND);
PROCISHUNGAPPWINDOW IsHungAppWindow; // 前面是函数指针声明
IsHungAppWindow = (PROCISHUNGAPPWINDOW) GetProcAddress(GetModuleHandle(_T( "user32 ")), "IsHungAppWindow "); // 查询函数指针
BOOL fHung = IsHungAppWindow(hWnd); // 调用并返回值
------解决方案--------------------
比如说你现在有个dll文件为 ****.dll, 导出函数为CString GetString();
具体代码:
typedef CString (* DLLFUN)();
DLLFUN MainFun;
HINSTANCE hDll;
hDll = LoadLibrary(_T( "****.dll "));
CString strMy;
if(hDll)
{
MainFun = (DLLFUN)GetProcAddress(hDll, _T( "GetString "));
strMy = MainFun();
}
------解决方案--------------------
呵呵,如果函数返回的是字符指针,而不是字符串对象,情况就要复杂一点,这里就涉及到不同模块之间堆内存的分配和释放的问题。
------解决方案--------------------
x = Proc(...);
LoadLibrary-> GetProcAddress-> call function
取返回值与调用一般的函数没有什么区别。
当然不同堆的内存分配与释放的问题得注意了。