2013-03-31 68 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」模板。我不敢相信我錯過了!