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。 –