close
Dispatch dlltest = new Dispatch("DLLFile.Package");   --> import package, DLLFile應是檔名
Dispatch.callSub(dlltest, "Class1", P1, P2, P3, P4, P5);  --> new class
Variant vResult = Dispatch.call(dlltest, "Method1");      --> run method
DLL本身也是OOP,在new Dispatch時,等於Java的import
在callSub時,等於Java的new Class,後面最多接五個參數,但不知算建構子參數還是method參數
最後call才是執行dll的method.

據說Jacob是不支援multi-thread,後來找到的解法是synchroized,但不是針對Dispatch的instance,方法如下:
private static byte[] lock_Class1 = new byte[1];
synchronized (lock_Class1) {
    Dispatch.callSub(dlltest, "Class1", P1, P2, P3, P4, P5);  --> new class
    Variant vResult = Dispatch.call(dlltest, "Method1");
}
如此一來,當有thread使用Class1時,第二個thread就得排隊等第一個thread使用Class1完畢.
這種作法雖然降低效能,卻不至於讓WebSphere Crash

富邦的DLL Hell發生在Windows 2000 Server底下, 而Jacob.jar卻可能是在更先進的OS下編譯.
所以解決之道是將Jacob的source code在Windows 2000下編譯.而且版本也有差.
在Jacob v1.10.1在Windows 2000下以IBM JDK 1.4.2編譯才能在Windows 2000下的WebSphere運作
Jacob v1.12就不行,且v1.10.1除了有jacob.dll外,尚需加入jcom.dll與jacob.dll一起放入windows/system32底下
 
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Jemmy 的頭像
    Jemmy

    Jemmy Walker

    Jemmy 發表在 痞客邦 留言(0) 人氣()