首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >窗口dllmain动态库

窗口dllmain动态库
EN

Stack Overflow用户
提问于 2016-10-22 09:53:21
回答 2查看 658关注 0票数 0

我遇到了一个问题,所以我用windows表单创建了一个应用程序,但是现在我想让它显示出来,因为我把它注入了一个动态库,而不是一个可执行的库--现在,您可以将它用于winapi。

代码语言:javascript
复制
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表单

代码语言:javascript
复制
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':未找到标识符

我希望有人能帮我

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-22 11:52:27

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

修正错误#2:

代码语言:javascript
复制
HWND hProcessCenter;
if (fdwReason == DLL_PROCESS_ATTACH)
{
    DisableThreadLibraryCalls(hinstDLL);
        hProcessCenter = ::FindWindow(NULL, _T("WINDOW"));

}

修正错误#3:

代码语言:javascript
复制
#include <tchar.h>
票数 0
EN

Stack Overflow用户

发布于 2016-10-22 10:05:50

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

错误2说明您需要在您的hProcessCenter(.)中定义“DllMain”在某个地方发挥作用。可能,因为您没有在某个地方使用该变量,所以可以将行转换为::FindWindow(NULL, _T("WINDOW"));,使其具有可编译的代码。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40190715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档