windowsform dllmain 动态库

windowsform dllmain dynamic library

计算器 我遇到了一个问题,所以我以 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':使用 /clr:pure 或 /clr:safe

编译的函数的调用约定“__stdcall”无效

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

错误 3 错误 C3861:“_T”:找不到标识符

我希望有人能帮助我

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

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

对于错误3,您需要确保编译时支持Unicode。否则找不到宏 _T (What does _T stands for in a CString).

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

修复错误 #2:

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

}

修复错误 #3:

#include <tchar.h>