我正在尝试在我的Minecraft相关项目中使用JNI,但我还不太了解。我想打印所有实时日志(甚至更多,如注入的DLL控制台中的实时日志)。我应该看什么?例外还是其他?
有时使用此代码(我是怎么做的,但是我确实可以,但是我没有)我能够捕获some [Server thread/INFO]
日志。还有更多[Server thread/INFO]
,但请问为什么它没有被抓住/打印出来。
#include "pch.h"
#include <jni.h>
#include <iostream>
JavaVM* jvm;
JNIEnv* env;
HANDLE jvmHandle;
JavaVMOption vm_options;
JavaVMInitArgs vm_args;
void init() {
AllocConsole();
freopen_s((FILE**)stdout, "CONOUT$", "w", stdout);
freopen_s((FILE**)stderr, "CONOUT$", "w", stderr);
freopen_s((FILE**)stdin, "CONOUT$", "w", stdin);
std::cout << "This works" << std::endl;
HMODULE m_hDllInstance = LoadLibraryA("jvm.dll");
typedef jint(JNICALL* GetCreatedJavaVMs)(JavaVM**, jsize, jsize*);
GetCreatedJavaVMs jni_GetCreatedJavaVMs =
(GetCreatedJavaVMs)GetProcAddress(m_hDllInstance, "JNI_GetCreatedJavaVMs");
jint size = 1;
jint vmCount;
jint ret = jni_GetCreatedJavaVMs(&jvm, size, &vmCount);
jint rc = jvm->AttachCurrentThread((void**)&env, NULL);
std::cout << "JVM load succeeded: Version ";
jint ver = env->GetVersion();
std::cout << ((ver >> 16) & 0x0f) << "." << (ver & 0x0f) << std::endl;
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
init();
return TRUE;
}