在c++ dll项目中包含依赖项会导致dll构建失败



我正在制作一个使用Lua C API的可注入DLL文件。我遵循以下教程:https://www.youtube.com/watch?v=4l5HdmPoynw&ab_channel=javidx9关于如何将Lua嵌入到c++中,并决定将Lua嵌入到可注入的DLL中。DLL工作得很好,直到我使用来自Lua C API的代码。Visual Studio没有帮助我,因为它表现得好像DLL中没有任何问题。我错过什么了吗?

下面是我的代码:
//dllmain.cpp
#include "pch.h"
#include <string>
#include <Windows.h>
extern "C" {
#include "lua542/include/lua.h"
#include "lua542/include/lauxlib.h"
#include "lua542/include/lualib.h"
}
#ifdef _WIN32
#pragma comment(lib, "lua542/liblua54.a")
#endif
bool was_pressed = false;
bool IsKeyPressed()
{
bool is_pressed = (GetAsyncKeyState(0x4A) & 0x8000) != 0;
if (!was_pressed && is_pressed)
{
was_pressed = is_pressed;
return true;
}
was_pressed = is_pressed;
return false;
}
DWORD WINAPI TestThread(HMODULE hModule) {
lua_State* L = luaL_newstate();
while (true) {
//Activates on pressing key "J"
if (IsKeyPressed()) {
std::string cmd = "a = 7 + 11";
luaL_openlibs(L);
luaL_dostring(L, cmd.c_str());
}
}
return 0;
}
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD  ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
MessageBoxA(NULL, "Test", "Test", MB_OK);
CloseHandle(CreateThread(nullptr, 0, (LPTHREAD_START_ROUTINE)TestThread, hModule, 0, nullptr));
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

我试图将Lua库文件夹保存在DLL文件的同一文件夹中,但该文件仍然不起作用。我期望DLL工作得很好,并与它的依赖项一起工作,因为Visual Studio表现得像什么都没有错。

我不确定这是否与问题有关,但我目前正在使用Visual Studio 2019。

好的,所以我找到了问题所在(意识到这一点后我觉得有点愚蠢)。我首先必须注入我正在使用的库DLL,然后我才能注入我的DLL。这样,我的目标应用程序就有了准备好的库和可能需要该库的dll。此外,感谢engf-010,我意识到我在DllMain中使用CreateThread是一种有风险的方法。现在,我将手动注入库DLL,但我可能会添加自动执行此操作的代码(尽管这可能会将其标记为病毒,因此我对此有点矛盾)。谢谢大家的帮助!

最新更新