Доступ к 32-битной COM DLL из 64-битного Java-приложения (запись реестра не найдена) - PullRequest
3 голосов
/ 28 декабря 2011

Я пытаюсь вызвать CoCreateInstance (...) через 64-битную библиотеку Java: org.eclipse.swt.internal.ole.win32.COM.DLL, которую я пытаюсь подключить, является DLL для Visual SourceSafe.Суть проекта заключается в портировании плагина VSS (http://sourceforge.net/projects/vssplugin/), созданного для 32-битного Eclipse, на 64-битный Eclipse.

. Вызов работает нормально, когда я использую 64-битную версию org.eclipse.swt.internal.ole.win32.COM, но с 32-разрядной версией вызов завершается неудачно. Этот вызов используется следующим образом:

private void init(GUID guid) {
    long[] ppv = new long[1];
    int result = COM.CoCreateInstance(guid, 0, COM.CLSCTX_INPROC_HANDLER | COM.CLSCTX_INPROC_SERVER | COM.CLSCTX_LOCAL_SERVER,
            COM.IIDIDispatch, ppv);
    if (result != COM.S_OK)
        OLE.error(OLE.ERROR_CANNOT_CREATE_OBJECT, result);
    init(new OleAutomation(new IDispatch(ppv[0])));
}

Вызов завершается неудачно и возвращает -2147221164, что, я полагаю,это какой-то код ошибки, указывающий, что соответствующая запись реестра не найдена.

Вот некоторые попытки, которые я пробовал:

У кого-нибудь есть советы по этому поводу?

Ответы [ 2 ]

5 голосов
/ 28 декабря 2011

CoCreateInstance просто вызывает LoadLibraryEx, и это не может загрузить 32-битные библиотеки в 64-битном процессе.Период, когда-либо.С другой стороны, вы можете:

  1. получить допустимую 64-битную копию компонента com.
  2. создать собственный не обрабатываемый COM-сервер, который в свою очередь вызываетодин, который у вас есть, и вызовите CoCreateInstance для его идентификатора.
  3. Создайте веб-сервис, который обертывает эту вещь, и используйте для вызова java.
  4. вернитесь к 32-битному Eclipse.
1 голос
/ 20 декабря 2013

Если COM DLL совместима с автоматизацией, вам просто нужно установить запись реестра DllSurrogate . COM-подсистема запустит 32-битный DllHost.exe, который будет использоваться как COM-сервер out-proc для вашего 64-битного процесса.

...