(現在) 空の関数のみをエクスポートする 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
);
キーの押下を検出するために Windows フックでこの DLL を使用する予定ですが、別の実行可能ファイルから LoadLibrary を呼び出すと、次のようなランタイム エラーが返されます。
「DLL 'C:\Users\Orin\Documents\Visual Studio 2010\Projects\winmain\Debug\winmain.dll' は、OS ローダー ロック内でマネージ実行を試みています。DllMain またはイメージ初期化関数内でマネージ コードを実行しようとしないでください。これを行うと、アプリケーションがハングする可能性があります。」
それは素晴らしいことですが、ここに問題があります。KeyboardProc 関数でコードをまったく実行しておらず、DllMain ルーチンさえありません。
私が試したこと(そしてうまくいかなかった):
- プロジェクトのプロパティで CLR を無効にする
- 「DllMain」ルーチンを削除する
- 関数宣言時の「#pragma unmanaged」の使用
提案やコメントは本当にありがたいです!