0
我正在编写\(编译)一个当前只导出空白函数的DLL。源代码:C++加载程序锁定错误
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'当宣布功能
建议和意见,真的很感激!
调试+异常,展开“托管调试助手”节点,取消LoaderLock。 –
@HansPassant我试过了,然后它出现一个运行时错误,说我试图在本机代码初始化期间运行MSIL代码。 : -/ – user191125
很明显,你正在做的事情非常错误,完全不清楚可能是什么。再次启动并且不*从这次CLR节点中选择项目模板。使用“Win32项目”模板创建一个非托管DLL。 –