最近学习JNI 在网上有个文章,里面有个例子,最终的结果是用jni能把windows下的MessageBox函数调出来。
这篇文章转贴的人不少,但是不知道转贴的人都实际的调试了没有。
其中生成dll的cpp内容为:
#include 
#include "ShowMsgBox.h"BOOL APIENTRY DllMain(HANDLE hModule, 
DWORD dwReason, void** lpReserved) {
return TRUE;
}JNIEXPORT void JNICALL 
Java_ShowMsgBox_ShowMessage(JNIEnv * jEnv, 
jobject this, jstring jMsg) {
const char * msg;
msg = (*jEnv)->GetStringUTFChars(jEnv, jMsg,0);
MessageBox(HWND_DESKTOP, msg, 
"Thinking in Java: JNI",
MB_OK | MB_ICONEXCLAMATION);
(*jEnv)->ReleaseStringUTFChars(jEnv, jMsg,msg);
}我按照文章上的步骤和代码调试,出现的问题是,只能听到MessageBox函数产生的声音,但是却开不到其对话框,
在google上搜索的半天也没有结果,于是就在vc下新建的一个win32控制台程序,在程序里调用MessageBox,结果成功,有声有像。
于是想是不是java在调用dll时其实messagebox已经把对话框构建出来了,但是由于时间太快,还没等它出现 dll的内容已经结束了。于是
JNIEXPORT void JNICALL 
Java_ShowMsgBox_ShowMessage(JNIEnv * jEnv, 
jobject this, jstring jMsg) {
int a;
const char * msg;
msg = (*jEnv)->GetStringUTFChars(jEnv, jMsg,0);
MessageBox(HWND_DESKTOP, msg, 
"Thinking in Java: JNI",
MB_OK | MB_ICONEXCLAMATION);
(*jEnv)->ReleaseStringUTFChars(jEnv, jMsg,msg);cin<<a;}想保留住dll,但是还是只能听见声看不到影