为什么我的DLL不执行EntryPoint?

时间:2019-02-13 03:56:17

标签: c++ winapi lua dll-injection

我将lua软件包添加到了我的c ++项目中,但是当我的项目中包含lua时,附加DLL时都不会调用任何函数,但是当我不包含lua时,附件中就会出现消息框。我确定这不是注入程序,因为我测试了带有多个程序的DLL,现在它使我发疯。有人在正确的道路上有任何解决方案或步骤吗?我真的很感激!

使用的软件包:https://bitbucket.org/sgrottel_nuget/lua/overview

编辑:包括lua头会从我的dll中删除功能。删除lua标头(注释为“ #include“ lua.hpp”)将弹出消息框。我使用lua包是否错误或是否错过了一个小步骤?

#include "FVM.h" // includes lua headers etc. (when removed function works on attachment)


    // Entry point
    BOOL APIENTRY DllMain(HMODULE hModule,
        DWORD  ul_reason_for_call,
        LPVOID lpReserved
    )
    {
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH:
            MessageBoxA(NULL, "attached", "Function", MB_OK);
        case DLL_THREAD_ATTACH:
            MessageBoxA(NULL, "attached", "Function", MB_OK);
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
        }
        return TRUE;
    }

1 个答案:

答案 0 :(得分:0)

我无法重现此问题。请按照我的步骤操作,看看它是否可以重现此问题。

  1. 使用Windows桌面应用程序模板创建主应用程序。
  2. 使用动态链接库(DLL)模板创建DLL应用程序。
  3. 将LUA nuget软件包安装到DLL应用程序中。
  4. 将头文件添加到dllmain.cpp中,并添加与您的代码相同的MessageBoxA。
  5. 在主应用程序中加载DLL:

    HMODULE myDll = LoadLibraryA("D:\\TestDllLoad\\Debug\\Dll1.dll");

结果是每次我启动主应用程序时消息框显示为“已附加”。

enter image description here