Использование tlbimp без необходимости второй сборки?

Я пытаюсь реализовать COM-интерфейс в моей dll С#, чтобы другие могли его использовать. Я определил интерфейс в foo.idl.

Я пропустил foo.idl через tlbimp, чтобы создать foo.dll, сборку .Net. Теперь, чтобы реализовать мой интерфейс, я могу сослаться на foo.dll в моей dll для реализации интерфейса.

Это работает отлично, как есть, за одним исключением: теперь мне нужно распространять две dll вместо одной. На самом деле это противоречит требованиям проекта, над которым я работаю: поставить одну DLL.

Есть ли способ объединить dll tlbimp с моей или любой другой способ сделать это (реализовать COM-интерфейс на С# без второй dll)?


person LCC    schedule 01.05.2012    source источник
comment
вы сделали это в обратном порядке: просто определите интерфейс как интерфейс C #, используя ComExport и связанные атрибуты, затем используйте regasm на целевых компьютерах, чтобы зарегистрировать сборку .NET для COM-взаимодействия.   -  person Michael Edenfield    schedule 01.05.2012


Ответы (2)


Хороший дизассемблер выполняет свою работу, как Reflector. Вы можете просто разобрать сборку взаимодействия и скопировать сгенерированные объявления интерфейса C# в свой исходный код. Конечно, вы должны делать это только в том случае, если объявления интерфейса и IID стабильны.

И обязательно подумайте об обновлении до VS2010. Его функция «внедрить типы взаимодействия» позволяет отправлять сборку без сборки взаимодействия.

person Hans Passant    schedule 01.05.2012
comment
Фейспалм. Я использую VS2010, я просто не знал о функции встраивания типов взаимодействия. Теперь делаю, спасибо! - person LCC; 01.05.2012

Вероятно, вы могли бы обмануть, используя .tlb вместо dll «клея».

Я предлагаю вам создать смешанную сборку с использованием MSVC++/CLR.

У этого может быть недостаток, заключающийся в том, что вы не можете использовать C# в той же сборке. Если вы хотите добавить код C# в смесь, вы можете выжать из сложной ситуации, используя

Другие, возможно, интересные мысли см. в моем предыдущем ответе:

person sehe    schedule 01.05.2012
comment
К сожалению, сборка в смешанном режиме невозможна. Библиотека, которую я создаю, написана на C#, и результатом должна быть одна dll. ILMerge может быть вариантом. - person LCC; 01.05.2012