集成 Windows 本地应用到 Eclipse RCP 程序中
2009-12-18 00:00:00 来源:WEB开发网这个 Java 函数对应的的 C++ 函数是 Java_com_reparent_ReparentUtil_startAndReparent(JNIEnv *env, jclass classobj, jint parent, jstring command, jstring wndClass), 这个函数主要实现两部分的功能:
启动 Windows 应用程序;
获取 Windows 应用程序的主窗口句柄;
将 Windows 应用主窗口设置成指定窗口的子窗口。
启动 Windows 应用程序
下面我们来看看启动 Windows 应用程序的实现. 我们先将函数传入的 Java 字符串参数转化成 C 字符串。这个过程主要通过 GetStringChars() 来实现。
JNIEXPORT jint JNICALL Java_com_reparent_ReparentUtil_startAndReparent
(JNIEnv *env, jclass classobj, jint parent, jstring command,
jstring wndClass){
jboolean isCopy=FALSE;
PROCESS_INFORMATION pInfo;
STARTUPINFO sInfo;
int hParentWnd;
jsize len = ( *env ).GetStringLength(command);
const jchar *commandstr = (*env).GetStringChars(command,&isCopy);
const jchar *wndClassStr = NULL;
char commandcstr[200];
int size = 0;
size = WideCharToMultiByte( CP_ACP, 0, (LPCWSTR)commandstr,
len, commandcstr,(len*2+1), NULL, NULL );
(*env).ReleaseStringChars(command, commandstr);
if(size==0){
return 0;
}
commandcstr[size] = 0;
if(wndClass!=NULL){
wndClassStr = (*env).GetStringChars(wndClass,&isCopy);
if(wndClassStr!=NULL){
len = (*env).GetStringLength(wndClass);
size = WideCharToMultiByte( CP_ACP, 0, (LPCWSTR)wndClassStr,
len, wndClassName,(len*2+1), NULL, NULL );
wndClassName[size] = 0;
(*env).ReleaseStringChars(wndClass, wndClassStr);
}
}
更多精彩
赞助商链接