VS2010 C++調用Java的Jar包

在網上看了一圈,只有一個示例代碼,並且運行有錯誤,下面給出正確代碼:java

 

JarAppCall.hios

 1 #pragma once  
 2   
 3 
 4 class CJarAppCall  
 5 {  
 6 public:  
 7     CJarAppCall(void);  
 8     ~CJarAppCall(void);  
 9   
10     /* 
11     @brief 執行Jar包調用,等待執行完成返回 
12     @param[in] strJarDir jar包目錄 
13     @param[in] strJarName jar包名稱 
14     @return 執行是否成功 
15     */  
16     bool Run(const CString& strJarDir, const CString& strJarName);  
17   
18 private:  
19     bool CallApp(const CString& strJarName);  
20 };  

 

JarAppCall.cppwindows

 1 #include "StdAfx.h"  
 2 #include "JarAppCall.h"  
 3   
 4 CJarAppCall::CJarAppCall(void)  
 5 {  
 6 }  
 7   
 8   
 9 CJarAppCall::~CJarAppCall(void)  
10 {  
11 }  
12   
13 bool CJarAppCall::Run(const CString& strJarDir, const CString& strJarName)  
14 {  
15     //緩存當前目錄  
16     WCHAR sOldDir[MAX_PATH] = {0};  
17     GetCurrentDirectory(MAX_PATH, sOldDir);  
18   
19     //設置當前目錄爲jar包目錄  
20     SetCurrentDirectory(strJarDir);  
21     bool bCalRest = CallApp(strJarName);  
22     //還原當前目錄  
23     SetCurrentDirectory(sOldDir);  
24   
25     return bCalRest;  
26 }  
27   
28 bool CJarAppCall::CallApp(const CString& strJarName)  
29 {  
30     WCHAR sSysDir[MAX_PATH] = {0};  
31     GetSystemDirectory(sSysDir, MAX_PATH);  
32     CString strFullPath = *sSysDir;  
33     strFullPath += _T(":\\cmd.exe");  
34     CString strCmdLine = _T(" /C ");  
35     strCmdLine += _T("java -jar ");  
36     strCmdLine += strJarName;  
37   
38     STARTUPINFO si = {sizeof(si)};  
39     PROCESS_INFORMATION pi;  
40     BOOL bRunProgram = CreateProcess(strFullPath.GetBuffer(),  
41         strCmdLine.GetBuffer(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);  
42   
43     strFullPath.ReleaseBuffer();  
44     strCmdLine.ReleaseBuffer();  
45   
46     if (!bRunProgram)  
47     {  
48         return false;  
49     }  
50   
51     // 等待程序結束  
52     WaitForSingleObject(pi.hProcess,INFINITE);  
53     CloseHandle(pi.hProcess);  
54   
55     return true;  
56 }  

這裏要注意,33行是:\\cmd.exe,其餘網站漏掉了冒號;並且這樣設置路徑就要在windows/system32下把cmd.exe複製到C盤根目錄下。緩存

 

main.cpp網站

 1 #include "afx.h"
 2 #include <WinDef.h>
 3 #include <string>
 4 #include <wchar.h>
 5 #include <tchar.h>
 6 #include <iostream>
 7 #include "JarAppCall.h"
 8 using namespace std;
 9 
10 int main()
11 {
12     CString strJarDir = _T("D:\\ICBCdriverJAVA1\\ICBCdriverJAVA1");  
13     CString strJarName = _T("ChinaBank.jar");  
14   
15     CJarAppCall jarCall;  
16     if (!jarCall.Run(strJarDir, strJarName))  
17     {  
18         //啓動失敗  
19         printf("fail!");
20         return -1;  
21     }
22 }

這裏最好把提示信息的那個AfxMessageBox(_T("啓動失敗"));  刪掉,容易報錯。字符集最好設置爲Unicode。MFC使用設置爲在共享DLL中使用MFC(可能由於CString是MFC的東西,這個不是太懂,看網上的帖子摸索出來的)。spa

相關文章
相關標籤/搜索