vfprintf hook: getting only garbage
843829Mar 9 2004 — edited Mar 16 2004Hi,
I try to launch an java application from a MS VC++ 2003 app aka C prog.
I attached a vpfintf hook to the jvm, however, what I get via the hook,
is always garbage. Does anybody know, whats going wrong here ?
FYI:
Environment:
W2K 5.00.2195 SP 4, german
java version "1.4.2_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02)
Java HotSpot(TM) Client VM (build 1.4.2_03-b02, mixed mode)
The relevant code snipplets from the C program:
/*
#define CHAR wchar_t
#define VSNPRINTF _vsnwprintf
#define FORMAT L"[%04X:%08d] %s"
#define SPRINTF swprintf
#define LOG logwWrite
*/
#define CHAR char
#define VSNPRINTF _vsnprintf
#define FORMAT "[%04X:%08d] %s"
#define SPRINTF sprintf
#define LOG logWrite
static jint JNICALL vfprintfHook(FILE fp, const CHAR format, ...) {
CHAR tid[4096 + 128];
CHAR buffer[4096];
static const CHAR *tidFormat = FORMAT;
va_list args;
jint len;
va_start(args, format);
len = VSNPRINTF(buffer, 4096, format, args);
va_end(args);
if (len > 0) {
SPRINTF(tid, tidFormat, GetCurrentThreadId(), time(NULL), buffer);
LOG(tid);
}
return 0;
}
...
JavaVMOption *options;
JNIEnv *jenv;
JavaVM *jvm;
...
JavaVMInitArgs vm_args;
options[len++].optionString = "-verbose:jni";
options[len].optionString = "vfprintf";
options[len++].extraInfo = vfprintfHook;
...
vm_args.options = options;
vm_args.nOptions = len;
vm_args.ignoreUnrecognized = JNI_TRUE;
err = jni_JNI_CreateJavaVM(&jvm, &jenv, &vm_args);
...