2011-06-01 1 views
3

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

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

+0

Ваш вопрос немного неясно. Вы пытаетесь просмотреть код в DLL? ... и перевести его на C#? ... будет сложно с этим справиться. =) –

+0

Я знаю, о чем он говорит - я уточнил название и вопрос, чтобы быть немного яснее. Если вы все еще не понимаете, то вы либо являетесь фатальным, либо не знаете приседания о неуправляемом вмешательстве. – x0n

+1

x0n: Спасибо. Вы полностью меня поняли –

ответ

0

Вы не можете напрямую сгенерировать C#, но если ваша реальная проблема в том, что вам нужно настроить библиотеку interop, вам может быть повезло с помощью специального TLBIMP-команды CLR Interop на Codeplex - это довольно гибкий и у вас есть полный источник

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

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

+0

Спасибо, но мне нужно C# вместо dll как результат :( –

+0

Зачем вам нужен источник? Я обновил свой ответ с помощью альтернативной идеи, основанной на вышесказанном. – x0n

+0

Где? В памяти? Вы понимаете, что это еще одна пара костылей :( –

1

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

+0

Нет, проблема в том, что для интерфейса com это не только подпись, но и порядок членов. Отражатель нарушает этот порядок. –

+0

Затем измените порядок на В конце концов, у вас есть исходный код. Reflector просто показывает вам, что генерировал TLBIMP, он ничего не генерирует. –

+0

Попробуйте che ck его предложение на практике :( –

0

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

С уважением, Alois Kruas

+0

Но вы можете добавлять атрибуты для возврата типов и параметров метода в C#. http://stackoverflow.com/questions/131456/how-do-you-apply-a-net-attribute-to-a-return-type – Qwertie

+0

взлеты фиксированный это один. –