Объединение двух файлов .IDL или двух файлов .tlb в один файл - PullRequest
1 голос
/ 09 августа 2010

У меня есть 2 .net DLL, которые я открываю для COM, используя REGASM. Чтобы упростить ссылки в COM-клиенте, я хотел бы объединить их в один файл.

Я попытался преобразовать оба файла в IDL, а затем скопировать содержимое одного раздела библиотеки в другой, а затем собрать обратно в .tlb с помощью MIDL. Это хорошо работает для TypeDefs во втором IDL, однако, похоже, что происходит сбой, когда дело доходит до интерфейсов, которые я скопировал. OLE / COM viewer может видеть определения интерфейсов, но когда я пытаюсь использовать TLB через COM, он не может найти интерфейсы Я скопировал.

Прежде чем потратить на это много времени, я хотел убедиться, что таким образом можно скудно использовать IDL.

Ответы [ 3 ]

1 голос
/ 09 августа 2010

Я не вижу очевидного способа, которым это потерпит неудачу. Вы сказали, что объединили разделы библиотеки, но не сказали, что скопировали объявления интерфейса из другого .idl. Это было бы очевидным, но маловероятным объяснением.

Один режим отказа - это когда клиентское приложение использует библиотеку типов для маршалинга указателей интерфейса через границы квартир или вне процесса. Однако для этого требуются ключи реестра в HKCR \ Interfaces. .NET не создает их, вам придется сделать это самостоятельно. Вы бы знали, если бы вы это сделали, не слишком много объяснений.

1 голос
/ 09 августа 2010

Не могли бы вы использовать ILMerge , чтобы сначала объединить сборки .NET, а затем использовать REGASM в полученной сборке?

ILMerge - это утилита для объединения нескольких сборок .NET водиночная сборка .NET.Он работает как с исполняемыми файлами, так и с DLL-библиотеками и имеет несколько опций для управления обработкой и форматом вывода.

0 голосов
/ 12 августа 2010

Хорошо, получается, что проблемы, с которыми я сталкивался, не были связаны со слиянием IDL.

Если вы хотите объединиться с idl, вы можете сделать это, просто скопировав содержимое раздела библиотеки из одного idl в другой. Затем запустите midl для объединенного файла, чтобы превратить его в tlb.

...