2016-10-22 77 views
0

stackoverflower 我有一個問題,所以我做出的窗口形式的應用程序,但現在我想讓它顯示becouse我注入它的動態庫不是說你用這個WINAPI一個executeable iknowwindowsform DllMain的動態庫

BOOL APIENTRY DllMain(HMODULE hModule, 
    DWORD ul_reason_for_call, 
    LPVOID lpReserved 
    ) 
{ 
    switch (ul_reason_for_call) 
    { 
    case DLL_PROCESS_ATTACH: 
     DisableThreadLibraryCalls(hModule); 
     CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&showform, NULL, 0, 0); 
     break; 
    case DLL_THREAD_ATTACH: break; 
    case DLL_THREAD_DETACH: break; 
    case DLL_PROCESS_DETACH: break; 
    } 
    return TRUE; 
} 

和我想這對於Windows窗體

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) 
{ 
    if (fdwReason == DLL_PROCESS_ATTACH) 
    { 
     DisableThreadLibraryCalls(hinstDLL); 
      hProcessCenter = ::FindWindow(NULL, _T("WINDOW")); 

    } 
    return 1; 
} 

我是gettings這些錯誤的Windows窗體:

錯誤1個錯誤C3641:「DllM AIN':無效的調用約定 '__stdcall' 的功能與/ CLR編譯:純的或/ CLR:安全

錯誤2錯誤C2065:hProcessCenter':未聲明的標識符

錯誤3錯誤C3861: '_T':標識未發現

我希望有人能幫助我

回答

0

那麼錯誤1,我要提到的例子中公認的答案在這裏進行適當的包括:How to specify dll onload function for mingw32?

錯誤2說你ñ eed在你的DllMain(...)函數中定義「hProcessCenter」。很可能,因爲您沒有在某處使用該變量,您可以將該行轉換爲::FindWindow(NULL, _T("WINDOW"));以具有可編譯代碼。

對於錯誤3,您需要確保使用Unicode支持進行編譯。否則,找不到宏_TWhat does _T stands for in a CString)。

+0

我現在得到此錯誤 – Arix

+0

錯誤錯誤LNK1306:DLL入口點「int __clrcall main(cli :: array ^)」(?main @@ $$ HYMHP $ 01AP $ AAVString @ System @@@ Z)不能管理;編譯爲本地 – Arix

+0

@Neevo Lima宏_T可以用於目標ANSI和UNICODE應用程序,它在tchar.h中聲明 – Asesh

0

要糾正錯誤#1你應該編譯爲本地代碼,而不是管理

錯誤#2修正:

HWND hProcessCenter; 
if (fdwReason == DLL_PROCESS_ATTACH) 
{ 
    DisableThreadLibraryCalls(hinstDLL); 
     hProcessCenter = ::FindWindow(NULL, _T("WINDOW")); 

} 

修正了錯誤#3:

#include <tchar.h> 
+0

嗯,我仍然收到錯誤,這是代碼 [STAThreadAttribute] int main(array ^args) { \t //在創建任何控件之前啓用Windows XP視覺效果 \t Application :: EnableVisualStyles(); \t Application :: SetCompatibleTextRenderingDefault(false); \t //創建主窗口並運行它 \t Application :: Run(gcnew Form1()); \t return 0; } DLL入口點「int __clrcall main(cli :: array ^)」(?main @@ $$ HYMHP $ 01AP $ AAVString @ System @@@ Z)無法管理;編譯爲本地 – Arix

+0

看起來像你使用的是C++/CLI – Asesh

+0

是的,我正在使用c + + winapi的c + +窗體如何解決這個問題? – Arix