Я пытаюсь преобразовать ошибку Windows в исключительную ситуацию ввода-вывода Java с помощью функции ниже:
void ThrowIOException(JNIEnv * env, LPCTSTR lpszFunction, DWORD dw)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
// MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK);
LPVOID lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
(lstrlen((LPCTSTR)lpMsgBuf)+lstrlen((LPCTSTR)lpszFunction)+40)*sizeof(TCHAR));
StringCchPrintf((LPTSTR)lpDisplayBuf,
LocalSize(lpDisplayBuf),
TEXT("%s failed with error %d: %s"),
lpszFunction, dw, lpMsgBuf);
jclass Exception = env->FindClass("java/io/IOException");
if(env->ThrowNew(Exception, (const char *)lpDisplayBuf)){
printf("Can't throw IOException: %s\n", lpDisplayBuf);
}
LocalFree(lpMsgBuf);
LocalFree(lpDisplayBuf);
}
Я использую Unicode в своем проекте VC. IOException генерируется успешно, но сообщение в lpDisplayBuf не отображается должным образом.
Мне известно, что приведение lpDisplayBuf к "const char *" может быть неправильным, но я не знаю, как это исправить.