我为 Minecraft forge 1.16.5 制作了 GlowESP,但是当我尝试注入我的 dll 时出现错误。 Minecraft 挂起一会儿,调用进程 WerFault.exe(关于错误),然后我的 dll 从模块中卸载。我不知道问题出在哪里,我相信你可以帮助我。
.h 文件
#pragma once
#include <iostream>
#include <Windows.h>
#include "jni/jni.h"
JNIEnv* env = nullptr;
JavaVM* jVM = nullptr;
void Func();
.cpp file
#include "Info.h"
typedef jint(JNICALL* GetCreatedJavaVMs)(JavaVM**, jsize, jsize*);
BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD reason, LPVOID lpReserved)
{
if (reason == DLL_PROCESS_ATTACH)
{
HMODULE jvmHandle = GetModuleHandleA("jvm.dll");
GetCreatedJavaVMs JNI_GetCreatedJavaVMs = (GetCreatedJavaVMs)GetProcAddress(jvmHandle, "JNI_GetCreatedJavaVMs");
JNI_GetCreatedJavaVMs(&jVM, 1, NULL);
jVM->AttachCurrentThread((void**)&env, NULL);
Func();
return true;
}
return false;
}
#include "Info.h"
jclass MineClass = env->FindClass("net/minecraft/client/Minecraft");
jobject getInstance()
{
jmethodID getInstance = env->GetStaticMethodID(MineClass, "getInstance", "()Lnet/minecraft/client/Minecraft;");
return env->CallStaticObjectMethod(MineClass, getInstance);
}
jobject getPlayer()
{
jfieldID playerField = env->GetFieldID(MineClass, "player", "Lnet/minecraft/client/entity/player/ClientPlayerEntity;");
return env->GetObjectField(getInstance(), playerField);
}
void setGlow()
{
jclass Entity = env->FindClass("net/minecraft/entity/Entity");
jmethodID Glow = env->GetMethodID(Entity, "setGlowing", "(Z)V");
env->CallVoidMethod(getPlayer(), Glow, true);
}
void Func()
{
if (!getInstance())
return;
if (!getPlayer())
return;
if (GetAsyncKeyState(VK_RSHIFT))
{
setGlow();
}
}
我尝试更改玩家的映射,更改项目设置,但我不知道为什么 Minecraft 挂起并卸载我的 dll。