コンソールを出さないように書き換えました。

やっぱり、Windowsアプリケーションでコンソール出力は邪道だとおもって、これもかなり怠慢ですが、Javaのコンソール出力をキャプチャして、最終的にMessageBoxで結果を表示させるように組み替えてみました。

#include "wjnicall.h"


int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR     lpCmdLine,
                     int       nCmdShow) {
    std::basic_stringstream<_TCHAR> out;
    LPTSTR cmdLine = GetCommandLine();

    SECURITY_ATTRIBUTES sa;
    HANDLE inRead, outWrite;
    char buf[1024];
    DWORD readlen = 0;
    int cont = 1;

    memset(&sa, 0, sizeof(sa));
    sa.nLength = sizeof(sa);
    sa.lpSecurityDescriptor = 0;
    sa.bInheritHandle = TRUE;
    CreatePipe(&inRead,  &outWrite,  &sa, 512);

    SetStdHandle(STD_OUTPUT_HANDLE, outWrite);

    JvmEnv env;
    env.loadArgs(cmdLine);
    env.addJavaParam(String(_T("-Xms8m")));
    env.addJavaParam(String(_T("-Xms16m")));
    env.addJavaParam(String(_T("-server")));
    env.addJavaParam(String(_T("-Djava.compiler=NONE")));
    String latest = env.findJvm(JRERuntimeLib+LatestVersion, false);

    String msg_buff;
    if (env.loadJLib(latest) == 0) {
        env.addClassPath(_T("E:\\Workspace\\Common\\Java\\JNI\\net\\classes"));
        if (env.createJvm() == 0) {
            JvmService service = JvmService(env);
            service.setCallClass("IfInfoTest", "net.test");
            service.execute();
            do {
                if (service.end_wait(0) == 0) {
                    cont = 0;
                    break;
                }
                ReadFile(inRead, buf, 1024, &readlen, NULL);
                if (readlen <= 0) {
                    cont = 0;
                    break;
                }
                buf[readlen] = 0;
                msg_buff.append(String((_TCHAR*)_bstr_t((char*)buf)));
            } while(cont);
            service.setReturnCodeName("return_code");
            service.result();
            out << _T("Execute result ") << service.getReturnCode() << _T(":") << service.getReturnMessage() << std::endl;
            env.destroyJvm();
        }
        env.unloadJLib();
    }
    MessageBox(NULL, msg_buff.c_str(), out.str().c_str(), MB_OK);

    return 0;
}

この方がWindowsアプリケーションらしいですかねぇ・・・。