Использование бесплатной регистрации в приложении .NET - PullRequest
4 голосов
/ 19 января 2011

Я пытаюсь использовать стороннюю COM DLL (я не верю, что это компонент .NET) из службы .NET без регистрации COM DLL, но пока мне не повезло.

Я скопировал файлы манифеста отсюда (/280368/sozdat-faily-manifesta-dlya-com-bez-registratsii) для использования в качестве отправной точки (я сгенерировал манифест COM DLL с помощью mt.exe / regsvr42.exe, на который есть ссылка). Однако я получаю только следующую ошибку:

Исключение: System.InvalidCastException Сообщение: Невозможно привести объект COM типа «LOGICLib.LogicClass» к типу интерфейса «LOGICLib.ILogic». Эта операция завершилась неудачно, поскольку вызов QueryInterface для компонента COM для интерфейса с IID '{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAA3E8FB4}' завершился неудачно из-за следующей ошибки: такой интерфейс не поддерживается (исключение из HRESULT: 0x80004002 (E_NOINTERFACE)) , Источник: Interop.LOGICLib в LOGICLib.LogicSecuredClass.Connect (строковый IP, значение UInt16, Int32 и результат) в My.Server.MyAssembly.Loader.Connect () в D: \ MyProject \ Source \ Server \ MyAssembly \ Loader.cs: строка 461

Манифест приложения назван в честь exe-файла, который запускает службу - я также попытался назвать его после сборки, которая вызывает COM DLL. Я попытался запустить из командной строки и через отладчик Visual Studio. Я также попытался использовать файл Interop, предоставленный третьей стороной, и создать свой собственный.

(Примечание. До сих пор я тестировал только под Windows XP.)

Я потратил два дня на это сейчас и вообще не прогрессировал. Любые идеи, что я, возможно, пропустил?

Ответы [ 2 ]

4 голосов
/ 19 января 2011

Манифест приложения назван в честь исполняемого файла, запускающего службу

Да, это не работает.Windows всегда ищет манифест в самом EXE-файле, встроенный как неуправляемый ресурс.Только когда он не может найти его там, он будет искать файл .manifest на диске.Проблема в том, что управляемая программа, созданная с VS2008 и выше, уже имеет манифест.По умолчанию написано только «Я знаком с Vista».

Вы можете убедиться в этом сами, используя File + Open + File и выбрав свой EXE.Откройте узел RT_MANIFEST и дважды щелкните ресурс 1. Если вы не видите там своих записей COM-манифеста без регистрации, то он не будет работать.

Чтобы исправить, используйте Project + Add New Item ивыберите шаблон элемента «Файл манифеста приложения».Вы получите шаблонный манифест, скопируйте и вставите туда свои регулярные COM-записи.

0 голосов
/ 19 января 2011

Ну, за исключением того, что вы получаете ошибку приведения при попытке привести объект типа LogicClass к типу интерфейса ILogic. Похоже, LogicClass не реализует ILogic.

Вы не указали, что такое DLL или где вы ее взяли, поэтому вам лучше всего посмотреть документацию по библиотеке, которую вы пытаетесь использовать. Просто дикое предположение, но, похоже, вы неправильно его реализуете.

...