Как я могу сгенерировать исходный код C # для библиотеки COM Interop вместо сборки?

При импорте библиотеки COM (либо напрямую с помощью tlbimp, либо косвенно с помощью диалогового окна добавления ссылки Visual Studio) существует ли способ сгенерировать исходный код C # вместо двоичной сборки взаимодействия, например, Interop.Word.dll?

UPD: Рефлектор - плохая идея. Проблема в том, что для com-интерфейса не только подпись, но и порядок участников. Рефлектор этого порядка нарушен


person Community    schedule 01.06.2011    source источник
comment
Ваш вопрос немного непонятен. Вы пытаетесь просмотреть код в DLL? ... и перевести его на C #? ... с этим придется нелегко. знак равно   -  person Chris Barlow    schedule 01.06.2011
comment
Я знаю, о чем он говорит - я обновил заголовок и вопрос, чтобы было немного яснее. Если вы все еще не понимаете, значит, вы либо напрасны, либо не разбираетесь в неуправляемом взаимодействии.   -  person x0n    schedule 01.06.2011
comment
кому: x0n: Спасибо. Вы меня полностью поняли   -  person    schedule 01.06.2011
comment
Аналогичный вопрос: stackoverflow.com/questions/1058289/   -  person Kevin Hsu    schedule 01.06.2011


Ответы (3)


Я бы продолжил и сгенерировал сборку взаимодействия с помощью TLBIMP и использовал Reflector для ее разборки. Как вы увидите, сборка взаимодействия не имеет фактического кода реализации. Затем вы можете просто скопировать и вставить код (или необходимые CoClasses и интерфейсы) в новый файл .cs в своем проекте.

person Kevin Hsu    schedule 01.06.2011
comment
Нет, проблема в том, что для com-интерфейса не только подпись, но и порядок участников. Рефлектор этого порядка нарушает. - person ; 01.06.2011
comment
Затем измените их порядок вручную. В конце концов, у вас есть исходный код. Reflector просто показывает вам, что сгенерировал TLBIMP, он ничего больше не генерирует. - person Kevin Hsu; 01.06.2011
comment
Попробуйте проверить его предложение на практике :( - person ; 01.06.2011

Вы не можете сгенерировать C # напрямую, но если ваша реальная проблема заключается в том, что вам нужно настроить библиотеку взаимодействия, вам, возможно, повезет больше, используя настраиваемый инструмент TLBIMP команды CLR Interop на codeplex - он довольно гибкий, и у вас есть полный исходный код [к нему .]

http://clrinterop.codeplex.com/releases/view/17579

Обновление: если вы действительно пытаетесь избежать доставки двоичных файлов, вы могли бы реально интегрировать указанный выше инструмент (в исходном формате) в свой проект, чтобы вы могли сгенерировать эту библиотеку взаимодействия во время времени выполнения . Результат? Никаких двоичных файлов для отправки.

person x0n    schedule 01.06.2011
comment
Спасибо, но в результате мне нужен c # вместо dll :( - person ; 01.06.2011
comment
Зачем нужен исходник? Я обновил свой ответ альтернативной идеей, основанной на вышеизложенном. - person x0n; 01.06.2011
comment
Где? В памяти? Вы понимаете, что это еще одна пара костылей :( - person ; 01.06.2011
comment
Я не понимаю, почему MS не сделала возможным сгенерировать исходный код? Может были платные продукты? - person ; 01.06.2011

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

Ваш, Алоис Круас

person Alois Kraus    schedule 01.06.2011
comment
Но вы МОЖЕТЕ добавить атрибуты для возвращаемых типов и параметров методов в C #. stackoverflow.com/questions/131456/ - person Qwertie; 01.06.2011