Я использую библиотеку JACOB (Java COM Bridge) для вызова зарегистрированных COM-объектов из моей ОС Windows. Мне потребовалось некоторое время, пока я понял, как работает JACOB, и все настроил. Итак, моя текущая проблема заключается в следующем:
ActiveXComponent comp = new ActiveXComponent("iTunes.Application");
например, работает, мой iTunes запускается правильно и т. д. Если я хочу вызвать самостоятельно сгенерированный и зарегистрированный COM-объект, написанный на C #, JACOB отвечает на следующую ошибку:
Exception in thread "main" com.jacob.com.ComFailException: Can't co-create object
То, что мой iTunes запустился, было для меня индикатором того, что все настроено правильно, я не уверен, почему JACOB не может вызвать мою собственную .dll
В настоящее время я использую Visual Studio 2015 для регистрации сборки для функции COM-взаимодействия, которая в прошлом работала для меня довольно хорошо. COM-объект выглядит следующим образом:
[Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F")]
public interface ComClass1Interface
{
}
[Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ComClass1Events
{
}
[ComVisible(true)]
[Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(ComClass1Events))]
[ProgId("test.Application")]
public class ComClass1 : ComClass1Interface
{
}
Что-то не так с моей dll C# или JACOB требует определенного типа структуры в этой dll?
К сожалению, мне не удалось найти примеры COM для JACOB.
Заранее спасибо.
РЕДАКТИРОВАТЬ:
Если я изменю свою первую строку на:
ActiveXComponent comp = new ActiveXComponent("CLSID:{C9888A8E-8D23-4185-9D7D-A1E0B812803D}");
Я получаю следующее исключение:
Exception in thread "main" com.jacob.com.ComFailException: Can't find moniker
Однако моя .dll должна быть зарегистрирована.