2013-03-31 46 views
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'当宣布功能

建议和意见,真的很感激!

+0

调试+异常,展开“托管调试助手”节点,取消LoaderLock。 –

+0

@HansPassant我试过了,然后它出现一个运行时错误,说我试图在本机代码初始化期间运行MSIL代码。 : -/ – user191125

+0

很明显,你正在做的事情非常错误,完全不清楚可能是什么。再次启动并且不*从这次CLR节点中选择项目模板。使用“Win32项目”模板创建一个非托管DLL。 –

回答

0

找到答案:

当使用Visual Studio,你不能选择一个CLR库项目。而是使用“Win32 Project”模板。我不敢相信我错过了!