windowsform dllmain dynamic library

windowsform dllmain dynamic library

本文关键字:library dynamic dllmain windowsform      更新时间:2023-10-16

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

我在的窗口上试过这个

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,您应该编译为本机代码,而不是托管

修复错误#2:

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

修复错误#3:

#include <tchar.h>

对于错误1,我将参考此处接受答案中的示例以获得正确的包含:如何为mingw32指定dll onload函数?

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

对于错误3,您需要确保使用Unicode支持进行编译。否则,找不到宏_T(_T在CString中代表什么(。