【发布时间】:2011-10-26 18:05:59
【问题描述】:
我正在尝试构建一个 DLL,稍后我想使用 SetWindowsHookEx() 函数将其注入到某些进程中。奇怪的是,当我尝试加载 DLL 并尝试使用 GetProcAddress 获取其中包含的过程的地址时,如果我尝试获取 CBT 消息处理过程的地址,它会返回 NULL,但它适用于其他功能。
这是代码。
DLL 头文件 (.h)
#include <windows.h>
extern "C" {
__declspec(dllexport) LRESULT CALLBACK hookProc(int code, WPARAM wParam, LPARAM lParam);
__declspec(dllexport) int add(int a, int b);
}
DLL 文件 (.cpp)
#include "SimpleHook.h"
extern "C" {
__declspec(dllexport) LRESULT CALLBACK hookProc(int code, WPARAM wParam, LPARAM lParam) {
return CallNextHookEx(0, code, wParam, lParam);
}
__declspec(dllexport) int add(int a, int b) {
return a + b;
}
}
主文件
#include <iostream>
#include <windows.h>
#include <tchar.h>
int main(int argc, char* argv[]) {
HINSTANCE dllHandle = LoadLibrary(_T("SimpleHook.dll"));
if (dllHandle) {
// returns the correct address
cout << "add address: " << GetProcAddress(dllHandle, "add") << endl;
// returns NULL
cout << "hookProc address: " << GetProcAddress(dllHandle, "hookProc") << endl;
}
}
如果我使用 GetLastError(),我会得到 127 错误代码:
ERROR_PROC_NOT_FOUND:找不到指定的过程。
奇怪的是同一个文件中的其他函数都被正确加载了。 非常感谢任何帮助!
【问题讨论】: