windowsform dllmain动态库

时间:2016-10-22 09:53:21

标签: c++ winforms dll-injection

stackoverflower 我有一个问题,所以我在Windows窗体中创建了一个应用程序,但现在我想让它显示因为我注入它的动态库不是可执行的我知道你使用它为winapi

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;
}

我收到了Windows窗体的这些错误:

错误1错误C3641:' DllMain' :无效的通话约定' __ stdcall'对于使用/ clr编译的函数:pure或/ clr:safe

错误2错误C2065:' hProcessCenter' :未声明的标识符

错误3错误C3861:' _T':未找到标识符

我希望有人可以帮助我

2 个答案:

答案 0 :(得分:0)

对于错误1,我会参考此处接受的答案中的示例,以获取正确的包含:How to specify dll onload function for mingw32?

错误2表示您需要在某处的DllMain(...)函数中定义“hProcessCenter”。也许,因为您没有在某处使用变量,您可以将该行转换为::FindWindow(NULL, _T("WINDOW"));以获得可编译的代码。

对于错误3,您需要确保使用Unicode支持进行编译。否则,找不到宏_TWhat does _T stands for in a CString)。

答案 1 :(得分:0)

要更正错误#1,您应该编译为本机代码而不是托管

修复错误#2:

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

}

修复错误#3:

#include <tchar.h>