下载了一个键盘钩子的dll,但这个dll没.def,也没加extern C,为何可以直接调用函数不出错
下载了一个键盘钩子的dll,但这个dll没有.def,也没加extern C,为何可以直接调用函数不出错?
下载了一个键盘钩子的dll,但这个dll没有.def,也没加extern C,为何可以直接调用函数不出错?望告知这类DLL的结构及创建方法,这个原来是vc6.0创建的,后在vs2012转换。
http://yun.baidu.com/xcloud/****/pan/share/link?shareid=830501559&uk=475337378
地址在这里
上面是dll头文件的源码
------解决思路----------------------
这个是C++命名改编问题。
比如导出一个函数int Fuction(int a)
不加extern "C"且不使用DEF文件的话,该函数被导出的函数名将是:?Fuction@@YAHH@Z
如果想正确的调用这个函数有两种方法:
1.#include 头文件
#pragma comment(lib,"xxx.lib");
2.
HINSTANCE hDll = LoadLibrary(_T("xxx.dll"));
GetProcAddress(hDll, "?Fuction@@YAHH@Z");
如果加了extern "C"或使用了DEF文件的话,该函数被导出的函数名将是Fuction(不会进行C++命名改编)
如果想正确的调用这个函数有两种方法:
1.#include 头文件
#pragma comment(lib,"xxx.lib");
2.
HINSTANCE hDll = LoadLibrary(_T("xxx.dll"));
GetProcAddress(hDll, "Fuction");
在工程中设置编译为C程序的方法:
项目-XX属性-配置属性- C/C++ - 高级- 编译为
下载了一个键盘钩子的dll,但这个dll没有.def,也没加extern C,为何可以直接调用函数不出错?望告知这类DLL的结构及创建方法,这个原来是vc6.0创建的,后在vs2012转换。
http://yun.baidu.com/xcloud/****/pan/share/link?shareid=830501559&uk=475337378
地址在这里
#ifdef KEYDLL3_EXPORTS
#define KEYDLL3_API __declspec(dllexport)
#else
#define KEYDLL3_API __declspec(dllimport)
#endif
#define WH_KEYBOARD_LL 13
KEYDLL3_API bool installhook(HWND h);//This function installs the Keyboard hook.
KEYDLL3_API void removehook();//This function removes the previously installed hook.
KEYDLL3_API LRESULT CALLBACK hookproc(int ncode,WPARAM wparam,LPARAM lparam);//This function is called when the keyboard is operated.
上面是dll头文件的源码
------解决思路----------------------
这个是C++命名改编问题。
比如导出一个函数int Fuction(int a)
不加extern "C"且不使用DEF文件的话,该函数被导出的函数名将是:?Fuction@@YAHH@Z
如果想正确的调用这个函数有两种方法:
1.#include 头文件
#pragma comment(lib,"xxx.lib");
2.
HINSTANCE hDll = LoadLibrary(_T("xxx.dll"));
GetProcAddress(hDll, "?Fuction@@YAHH@Z");
如果加了extern "C"或使用了DEF文件的话,该函数被导出的函数名将是Fuction(不会进行C++命名改编)
如果想正确的调用这个函数有两种方法:
1.#include 头文件
#pragma comment(lib,"xxx.lib");
2.
HINSTANCE hDll = LoadLibrary(_T("xxx.dll"));
GetProcAddress(hDll, "Fuction");
在工程中设置编译为C程序的方法:
项目-XX属性-配置属性- C/C++ - 高级- 编译为