呼叫 COM 元件
00:12
其實, 使用 JNI 去存取 DLL, COM 都不是一件困難的事情, 最近在整合 PaPaGO!SDK, 因為他有提供 COM 元件, 所以剛開始想要利用
JACOB 來進行存取. 要利用 JACOB 並不是一件困難的事情, 下載相關的 zip 檔解壓縮後, 裡面會有一個 jacob.dll, 把他放到 %WINDOWS%system32 之下即可, 另外將 jacob.jar 放到你的開發目錄之中, 如果是 WEB 系統, 就放到 WEB-INF/lib 之下, ( ps. 如果是多 WebApps 會存取到該 jacob.jar, 要避免重複取得 DLL 的限制, 就把他放到共用目錄, 例如 Tomcat 亦即 common/lib 之下 )
透過 jacob, 就無須瞭解太多 JNI 與 C++ 程式碼的設計,
ActiveXComponent mapObject = new ActiveXComponent("Ppgsdk50.MapObject");
mapObject.invoke("LoadProfile", new Variant("C:\\PPGSDK\\Samples\\VC\\Data\\pc_standard.mpb"), new Variant(false));
mapObject.invoke("OpenMap",new Variant("C:\\PPGSDK\\Samples\\VC\\Data\\Taiwan_UYS.nv5"), new Variant(false));
mapObject.invoke("LoadBackgroundFile",new Variant("C:\\PPGSDK\\Samples\\VC\\Data\\Taiwan_c0.mmh"), new Variant(false));
mapObject.invoke("SetImageSize",new Variant(600), new Variant(800));
mapObject.invoke("SetMapCenterXY",new Variant(121517155), new Variant(25047185));
mapObject.invoke("SetMapCurrentScale",new Variant(12));mapObject.invoke("OutputMapImage", new Variant("C:\\ppgMap.png"), new Variant(false));
就會在 C 槽輸出 ppgMap.png 這張圖檔...但是不才的我, 不知道如何透過 JACOB 取回變數值.
例如
gpMapEngine->LoadProfile( PPG_DATA_PROFILE_UNICODE, &bResult);
我應該要取回 bResult 來進行判斷..
所以後來我使用
JAWIN 來進行開發, 透過 jawin 就有 Variant.ByrefHolder outValueRef = new Variant.ByrefHolder(new Integer(0));
可以傳出指標內容值, 加上 jawin 的文件較齊全, 所以我就改用 jawin 來連結 COM 元件. JACOB 真的應該加強他的文件撰寫.... :D