#ifdef __cplusplus
#define EXPORT extern "C" __declspec(dllexport)
#else
#define EXPORT __declspec(dllexport)
#endifEXPORT BOOL CALLBACK installHook(BOOL bInstall);
dll中是这样定义的,为什么用dependency walker看到的导出函数名是:
_installHook@4(也要使用这个来GetProcAddress)
怎么才能使它是installHook呢?另外我的DllMain是这样的
int WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, PVOID pvReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
installHook(TRUE);
break;
case DLL_PROCESS_DETACH:
installHook(FALSE);
break;
default:
break;
}
return TRUE;
}
为什么不能在LoadLibrary的时候自己installHook呢?
非得要在load之后自己用GetProcAddress取得函数地址后执行一次才行呢?
#define EXPORT extern "C" __declspec(dllexport)
#else
#define EXPORT __declspec(dllexport)
#endifEXPORT BOOL CALLBACK installHook(BOOL bInstall);
dll中是这样定义的,为什么用dependency walker看到的导出函数名是:
_installHook@4(也要使用这个来GetProcAddress)
怎么才能使它是installHook呢?另外我的DllMain是这样的
int WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, PVOID pvReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
installHook(TRUE);
break;
case DLL_PROCESS_DETACH:
installHook(FALSE);
break;
default:
break;
}
return TRUE;
}
为什么不能在LoadLibrary的时候自己installHook呢?
非得要在load之后自己用GetProcAddress取得函数地址后执行一次才行呢?
解决方案 »
- 如何阅读大型C++项目
- DLL的多线程问题
- 编译时出现LINK : fatal error LNK1104: cannot open file lib\fc.obj错误,Why?
- 【关于VC++】如何读取文本文件——在线等
- 如何得到当前DIALOG窗口程序的hwnd
- 用installshield打包VB程序时需要哪些支持文件呢?
- 高手,请教CEditView的用法(100分)
- 问一个list box的显示问题
- 谁有穷举字符串的算法?aaaaaa-zzzzzz
- 使用GetPrinter时,PRINTER_INFO_6中返回的dwStatus始终为0
- 关于函数 SHBrowseForFolder 的问题!
- 急 VC 怎么没有 ActiveXFrom 的东东啊
EXPORTS
installHook @1
Demo 是你DLL文件名
把CALLBACK 改成_cdecl
CALLLBACK是这样定义的
、_stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。
_installHook@4实际上是编译器“看到”的函数名,你导出的时候,还是可以使用你原来定义的函数名。另外,不能在LoadLibrary的时候自己installHook,原因是dll并没有自己的堆栈空间,它只能使用主调的堆栈,所以没有系统资源供其执行installHook这个函数。打个比方,可以说dll没有自己的“家”,它只能“寄居”。