C ++加载程序锁定错误

时间:2013-03-31 17:33:21

标签: c++ dll hook

我正在编写\编译一个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'

非常感谢您的建议和意见!

1 个答案:

答案 0 :(得分:0)

找到答案:

使用Visual Studio时,不得选择CLR Library项目。而是使用“Win32项目”模板。我不敢相信我错过了!