0

我正在编写\编译一个(当前)只导出一个空白函数的 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”

非常感谢您的建议和评论!

4

1 回答 1

0

找到答案:

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

于 2013-04-01T01:01:58.910 回答