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

Я пытаюсь реализовать COM-интерфейс в моей C# DLL для использования другими. Я определил интерфейс в foo.idl.

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

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

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

2 ответа

Решение

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

И определенно рассмотрите возможность обновления до VS2010. Функция "вставлять типы взаимодействия" позволяет вам отправлять сборку без сборки взаимодействия.

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

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

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

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

Другие вопросы по тегам