我正在编写\编译一个(当前)只导出一个空白函数的 DLL。源代码:
DLLMain.cpp-
LIBRARYEXPORT LRESULT CALLBACK KeyboardProc(
int code,
WPARAM wParam,
LPARAM lParam
){
return 0;
}
到目前为止一切都很好,这是我的 DLLMain.h-
using namespace std;
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
#define LIBRARYEXPORT __declspec(dllexport)
LIBRARYEXPORT LRESULT CALLBACK KeyboardProc(
int code,
WPARAM wParam,
LPARAM lParam
);
我计划使用这个 DLL 和 windows 挂钩来检测按键,但是当我从一个单独的可执行文件调用 LoadLibrary 时,它返回一个运行时错误说
“DLL 'C:\Users\Orin\Documents\Visual Studio 2010\Projects\winmain\Debug\winmain.dll' 正在尝试在 OS Loader 锁内进行托管执行。不要尝试在 DllMain 或图像初始化函数内运行托管代码,因为这样做会导致应用程序挂起。”
太好了,但问题是:我的 KeyboardProc 函数中根本没有运行任何代码,我什至没有 DllMain 例程
我尝试过的(但没有奏效):
- 在项目属性中禁用 CLR
- 删除我的“DllMain”例程
- 声明函数时使用“#pragma unmanaged”
非常感谢您的建议和评论!