WEB开发网
开发学院软件开发Java 集成 Windows 本地应用到 Eclipse RCP 程序中 阅读

集成 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)

这个 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); 
 } 
 } 

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:集成 Windows 本地

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接