#include "stdafx.h"
#include "redirectdll.h"
#include <windows.h>
#include <winsock2.h>BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}LRESULT CALLBACK HookProc(HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam){
MessageBox(NULL,"OK","Redirect",MB_OK);
return CallNextHookEx(hhk, nCode, wParam, lParam);
}
//HookProc函数是去在这个cpp中定义的,但弄来弄去总是
LINK : warning LNK4089: all references to "USER32.dll" discarded by /OPT:REF,
在其它的exe中调用这个dll时找不到HookProc函数,这是为什么???!!!
who can help me????thank you!!!
#include "redirectdll.h"
#include <windows.h>
#include <winsock2.h>BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}LRESULT CALLBACK HookProc(HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam){
MessageBox(NULL,"OK","Redirect",MB_OK);
return CallNextHookEx(hhk, nCode, wParam, lParam);
}
//HookProc函数是去在这个cpp中定义的,但弄来弄去总是
LINK : warning LNK4089: all references to "USER32.dll" discarded by /OPT:REF,
在其它的exe中调用这个dll时找不到HookProc函数,这是为什么???!!!
who can help me????thank you!!!
__declspec( dllexport ) LRESULT CALLBACK HookProc(HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam){
MessageBox(NULL,"OK","Redirect",MB_OK);
return CallNextHookEx(hhk, nCode, wParam, lParam);
}输出函数必须指定 __declspec( dllexport ) ,或者在 .def 文件中指定
HHOOK hHook=NULL;
HINSTANCE hDll=NULL;
HOOKPROC hp=NULL;
hDll=LoadLibrary("redirectdll.dll");
hp=(HOOKPROC)GetProcAddress(hDll,"HookProc");//这里hp始终是0,找不到我在redirectdll.dll中定义的HookProc,为什么????
hHook=SetWindowsHookEx(WH_CALLWNDPROC,hp,hDll,0);
search previous hook example.
HINSTANCE hDll=NULL;
HOOKPROC hp=NULL;
hDll=LoadLibrary("redirectdll.dll");//这里可以正确导入
hp=(HOOKPROC)GetProcAddress(hDll,"HookProc");//这里hp始终是0,找不到我在redirectdll.dll中定义的HookProc,为什么????
hHook=SetWindowsHookEx(WH_CALLWNDPROC,hp,hDll,0);我感觉这个思路很对呀?我先在redirectdll.dll中定义一个HOOK过程,再在一个EXE中导入这个redirectdll.dll,找到HookProc函数在入口地址,再用SetWindowsHookEx把HOOK消息和这个HOOK过程联系起来,这个思路有什么不对吗?问题就是#include "stdafx.h"
#include "redirectdll.h"
#include <windows.h>
#include <winsock2.h>
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
LRESULT CALLBACK HookProc(HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam){
MessageBox(NULL,"OK","Redirect",MB_OK);
return CallNextHookEx(hhk, nCode, wParam, lParam);
}
//HookProc函数是去在这个cpp中定义的,但弄来弄去总是
LINK : warning LNK4089: all references to "USER32.dll" discarded by /OPT:REF,
在其它的exe中调用这个dll时找不到HookProc函数,这是为什么???!!!
我没用__declspec( dllexport ) LRESULT CALLBACK HookProc(HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam)
#include "redirectdll.h"
#include <windows.h>
#include <winsock2.h>#pragma data_seg("shared")
HINSTANCE glhInstance=NULL;
HHOOK hHook=NULL;
#pragma data_seg()
#pragma comment(linker,"/section:shared,rws")BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
glhInstance=hModule
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
LRESULT CALLBACK HookProc(HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam)
{
MessageBox(NULL,"OK","Redirect",MB_OK);
return CallNextHookEx(hHook, nCode, wParam, lParam);
}__declspec(dllexport) void WINAPI SetHook() //导出这个函数来安装钩子。
{
hHook=SetWindowsHookEx(WH_CALLWNDPROC,HookProc,glhInstance,0);
}