我有一个与 JNI 交互的工作代码。当我注入 DLL 时,一切正常。我决定改进我的程序并使用 ImGui 和 MinHook 添加 GUI。此后,DllMain 不再被调用。项目中的 *.lib 文件对此有影响吗?在项目配置中,我仅更改了添加的库的目录。根据记录,我尝试使用 Visual Studio 进行调试,但所有断点均不起作用。
#include <cstdio>
#include <Windows.h>
#include <WinUser.h>
//#include "Core/Patching.h"
#include "Cheat.h"
#include "Java.h"
void MainThread(HMODULE module)
{
createEnv();
if (getEnv() != nullptr) {
//Patching::ApplyPatches();
while (true)
{
if (GetAsyncKeyState(VK_END)) break;
//runModules();
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
}
printf("DETACHED!!!\n");
FreeLibraryAndExitThread(module, 0);
}
extern "C" bool __stdcall DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
{
static FILE* p_file{ nullptr };
static std::thread main_thread;
if (reason == DLL_PROCESS_ATTACH)
{
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)MainThread, NULL, NULL, NULL);
}
else if (reason == DLL_PROCESS_DETACH)
{
}
return true;
}
#include "Java.h"
JNIEnv* env;
void createEnv() {
if (env == nullptr) {
JavaVM* p_jvm{ nullptr };
jint result = JNI_GetCreatedJavaVMs(&p_jvm, 1, nullptr);
JNIEnv* p_env{ nullptr }; // JNI interface pointer
p_jvm->AttachCurrentThread((void**)&env, nullptr);
if (env == nullptr)
printf("Creating JavaEnv failed\n");
}
printf("Successfully created JavaEnv\n");
}
我修正了错误。事实上,MinHook 项目生成了两个版本的 .lib 文件。其中一个是为了让人上瘾而设计的,而另一个则不是。我把它们搞混了。导入必要的库后,一切就位了。正确的文件具有前缀“lib”,结果名称是“libMinHook.x64.lib”