将实时Minecraft日志输出到注入的DLL的JNI控制台中

问题描述 投票:-2回答:1

我正在尝试在我的Minecraft相关项目中使用JNI,但我还不太了解。我想打印所有实时日志(甚至更多,如注入的DLL控制台中的实时日志)。我应该看什么?例外还是其他?

c++ java-native-interface minecraft
1个回答
0
投票

有时使用此代码(我是怎么做的,但是我确实可以,但是我没有)我能够捕获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;
}
© www.soinside.com 2019 - 2024. All rights reserved.