2014-07-15 33 views
2

OTAClient.dll版本10.0.0.2532無法使用Com4j

以下是我用來連接到QC,應用濾鏡和獲取qcpath和現場數據的代碼連接到HP質量中心。它與java 32位版本1.7工作正常。

import com.oracle.qcTasks.ClassFactory; 
    import com.oracle.qcTasks.IList; 
    import com.oracle.qcTasks.ISubjectNode; 
    import com.oracle.qcTasks.ITDConnection; 
    import com.oracle.qcTasks.ITDFilter; 
    import com.oracle.qcTasks.ITest; 
    import com.oracle.qcTasks.ITestFactory; 
    import com4j.Com4jObject; 

    public class qcClient { 

    public static void main(String[] args) { 

    ITest qcTestCase; 
    ISubjectNode qcTestCasePath; 
    Com4jObject SubjectField; 
    //QC url 
    String url = "http://fusionqc.us.oracle.com/"; 
    //username for login 
    String username = "username"; 
    //password for login 
    String password = ""; 
    //domain 
    String domain = "domain"; 
    //project 
    String project = "project"; 
    ITDConnection itdc = ClassFactory.createTDConnection(); 
    itdc.initConnectionEx(url); 
    itdc.connectProjectEx(domain, project, username, password); 
    boolean flag = itdc.connected(); 

    System.out.println(itdc.projectName());  
    ITestFactory qcTestFactory = itdc.testFactory().queryInterface(ITestFactory.class); 
    ITDFilter qcFilter=qcTestFactory.filter().queryInterface(ITDFilter.class);  


    String query="^Subject\\path^";   
    qcFilter.clear(); 

    qcFilter.filter("TS_SUBJECT", query);  

    IList qcTestList = qcFilter.newList();  
    for (Com4jObject com4jObject : qcTestList) { 
     qcTestCase = com4jObject.queryInterface(ITest.class); 
     System.out.println(qcTestCase.name()); 
     System.out.println(qcTestCase.field("TS_USER_09")); 


     SubjectField = (Com4jObject)qcTestCase.field("TS_SUBJECT"); 
     qcTestCasePath = SubjectField.queryInterface(ISubjectNode.class); 
     System.out.println(qcTestCasePath.path()); 
     break; 
    } 


    System.out.println("command output :: "+flag); 

    System.out.println("OUT");  
    itdc.disconnectProject(); 


} 

}

工程要求,我已經降級的Java版本爲1.6的64位版本。發佈降級後,我收到以下錯誤。

 Exception in thread "main" com4j.ExecutionException: com4j.ComException: 80040154 CoCreateInstance failed : Class not registered : .\com4j.cpp:153 
at com4j.ComThread.execute(ComThread.java:203) 
at com4j.Task.execute(Task.java:25) 
at com4j.COM4J.createInstance(COM4J.java:97) 
at com4j.COM4J.createInstance(COM4J.java:72) 
at com.oracle.qcTasks.ClassFactory.createTDConnection(ClassFactory.java:16) 
at com.oracle.qcCode.qcClient.main(qcClient.java:32) 
     Caused by: com4j.ComException: 80040154 CoCreateInstance failed : Class not registered : .\com4j.cpp:153 
at com4j.Native.createInstance(Native Method) 
at com4j.COM4J$CreateInstanceTask.call(COM4J.java:117) 
at com4j.COM4J$CreateInstanceTask.call(COM4J.java:104) 
at com4j.Task.invoke(Task.java:51) 
at com4j.ComThread.run0(ComThread.java:153) 
at com4j.ComThread.run(ComThread.java:134) 

我發現了類似的線程,但沒有找到相同的解決方案。請幫忙。是否對java版本有任何影響

回答

0

你使用什麼版本的com4j?請參閱this post在64位Windows機器上使用com4j。有沒有可以在64位環境中使用的COM對象?

根據this blog entry當您嘗試訪問64位環境中的32位COM對象時,您將收到類未註冊異常。它甚至包含使用一些註冊表黑客的解決方法。也許它工作?