Java 7: COM-API не работает с Quality Center (OTAClient.dll), но работает с Java 6.

Мы работаем на Windows 7 Enterprise, SP1, 64-битная. Мы только что установили Java 7 на все наши машины, что вызывает следующую проблему:

Когда моя программа пытается связаться с OpenTestArchitecture-API из Quality Center, она не может создать ActiveX-компонент. Я использую JACOBв качестве моей библиотеки Java-COM. Обновление до последней версии JACOB ничего не меняет.

Следующий тест работает с jdk1.6.0_24 (32 бит), но не работает с jdk1.7.0_04 (32 бит):

import java.io.File;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.LibraryLoader;

public class JacobTest {
    static {
        File lib = new File("lib/" + LibraryLoader.getPreferredDLLName() + ".dll");
        System.setProperty(LibraryLoader.JACOB_DLL_PATH, lib.getAbsolutePath());

        System.out.println("JACOB_DLL_PATH = " + lib.getAbsolutePath());
        LibraryLoader.loadJacobLibrary();
    }

    public static void main(String[] args) {
        try {
            // Excel: Works with jdk1.6.0_24 AND jdk1.7.0_04
            System.out.println("new ActiveXComponent(\"Excel.Application\");");
            new ActiveXComponent("Excel.Application");

            // Quality Center OTAClient: Only works with jdk1.6.0_24
            System.out.println("ActiveXComponent component = new ActiveXComponent(\"TDApiOle80.TDConnection\");");
            ActiveXComponent component = new ActiveXComponent("TDApiOle80.TDConnection");

            System.out.println("ComThread.InitSTA();");
            ComThread.InitSTA();

            System.out.println("Dispatch.call(component, \"InitConnectionEx\", \"http://intranet/qcbin\");");
            Dispatch.call(component, "InitConnectionEx", "http://intranet/qcbin");
        }
        catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}

Вывод jdk1.6.0_24:

JACOB_DLL_PATH = C:\Development\Java\Test\JacobTest\lib\jacob-1.17-M2-x86.dll

new ActiveXComponent("Excel.Application");
ActiveXComponent component = new ActiveXComponent("TDApiOle80.TDConnection");
ComThread.InitSTA();
Dispatch.call(component, "InitConnectionEx", "http://intranet/qcbin");

Вывод jdk1.7.0_04:

JACOB_DLL_PATH = C:\Development\Java\Test\JacobTest\lib\jacob-1.17-M2-x86.dll

new ActiveXComponent("Excel.Application");
ActiveXComponent component = new ActiveXComponent("TDApiOle80.TDConnection");
com.jacob.com.ComFailException: Invalid access to memory location.
    at com.jacob.com.Dispatch.createInstanceNative(Native Method)
    at com.jacob.com.Dispatch.(Dispatch.java:99)
    at com.jacob.activeX.ActiveXComponent.(ActiveXComponent.java:58)
    at JacobTest.main(JacobTest.java:26)

исходное сообщение ComFailException-Message: «Невозможно совместно создать объект», но я отредактировал следующий код в файле jacob Dispatch.cpp: (я не трогал CoCreateInstance, я просто хотел узнать, что такое HRESULT)

  // standard creation
  hr = CoCreateInstance(clsid,NULL,CLSCTX_LOCAL_SERVER|CLSCTX_INPROC_SERVER,IID_IUnknown, (void **)&punk);
  if (!SUCCEEDED(hr)) {
     if (hr == REGDB_E_CLASSNOTREG)
        ThrowComFail(env, "Can't co-create object: REGDB_E_CLASSNOTREG", hr);
     if (hr == CLASS_E_NOAGGREGATION)
        ThrowComFail(env, "Can't co-create object: CLASS_E_NOAGGREGATION", hr);
     if (hr == E_NOINTERFACE)
        ThrowComFail(env, "Can't co-create object: E_NOINTERFACE", hr);
     if (hr == E_POINTER)
        ThrowComFail(env, "Can't co-create object: E_POINTER", hr);

     _com_error error(hr);
     LPCTSTR errorText = error.ErrorMessage();

     ThrowComFail(env, errorText, hr);
     return;
  }

Кто-нибудь знает, в чем может быть проблема? Единственное отличие состоит в том, что я переключаюсь между средами выполнения Java 6 и Java 7.

Большое спасибо за помощь!

PS: Excel работает с обеими версиями и переход на com4j-Libraryничего не меняет. (У меня есть com4j-Test, но я не опубликовал его, потому что уже запостил достаточно кода)

Редактировать: Тот же тест работает с Windows XP, SP3 и Java 7.

8
задан r3zn1k 22 May 2012 в 10:56
поделиться