JAVA通过JNI来调来一个VC写的DLL,此DLL显示一个含有activeX控件的对话框,死活就是显示不出来。而用另一个VC写的程序去调用此DLL时,就能够显示出来此对话框,请问是何原因? 如果JAVA调用的此对话框中没有activeX,也会成功!动态库中的关键代码如下:
JNIEXPORT void JNICALL
Java_test_test1_ShowMessage(JNIEnv * jEnv,jobject obj,jstring jMsg,jobject window)
{
const char * msg;
msg = jEnv->GetStringUTFChars(jMsg,0);
MessageBox(HWND_DESKTOP, msg, "Thinking in Java: JNI",MB_OK | MB_ICONEXCLAMATION);
jEnv->ReleaseStringUTFChars(jMsg,msg);
printf("call Java_MyWindow1_MyWindow_init nResponse\r\n");
_flushall();
CTest test;
printf("3call Java_MyWindow1_MyWindow_init nResponse\r\n");
_flushall();
int ret=test.DoModal ();//此句返回值为-1,表示创建对话框失败了,注意:此对话框中有activeX,如果没有activeX,也会成功!
printf("3call Java_MyWindow1_MyWindow_init nResponse DoModal ret=%d\r\n",ret);
_flushall();}
extern "C" __declspec(dllexport) void Show()
{
AfxEnableControlContainer();
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CTest test;
test.DoModal ();//此句为VC的程序调用动态库时,创建对话框语句,可以成功!
}
JNIEXPORT void JNICALL
Java_test_test1_ShowMessage(JNIEnv * jEnv,jobject obj,jstring jMsg,jobject window)
{
const char * msg;
msg = jEnv->GetStringUTFChars(jMsg,0);
MessageBox(HWND_DESKTOP, msg, "Thinking in Java: JNI",MB_OK | MB_ICONEXCLAMATION);
jEnv->ReleaseStringUTFChars(jMsg,msg);
printf("call Java_MyWindow1_MyWindow_init nResponse\r\n");
_flushall();
CTest test;
printf("3call Java_MyWindow1_MyWindow_init nResponse\r\n");
_flushall();
int ret=test.DoModal ();//此句返回值为-1,表示创建对话框失败了,注意:此对话框中有activeX,如果没有activeX,也会成功!
printf("3call Java_MyWindow1_MyWindow_init nResponse DoModal ret=%d\r\n",ret);
_flushall();}
extern "C" __declspec(dllexport) void Show()
{
AfxEnableControlContainer();
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CTest test;
test.DoModal ();//此句为VC的程序调用动态库时,创建对话框语句,可以成功!
}
楼主【liuguibing】截止到2008-07-15 17:54:47的历史汇总数据(不包括此帖):
发帖的总数量:22 发帖的总分数:520 每贴平均分数:23
回帖的总数量:3 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:2 结贴的总分数:120
无满意结贴数:0 无满意结贴分:0
未结的帖子数:20 未结的总分数:400
结贴的百分比:9.09 % 结分的百分比:23.08 %
无满意结贴率:0.00 % 无满意结分率:0.00 %