Как получить доступ к IMetaDataEmit и другим COM-интерфейсам MetaData из C # или F #? - PullRequest
1 голос
/ 12 октября 2008

Я пишу компилятор на F # и хочу получить доступ к COM-интерфейсам неуправляемых метаданных во время выполнения .net. Прежде чем кто-либо упомянул это, Reflection.Emit не подходит для моих целей , и я не хочу использовать какой-либо другой метод, кроме COM-интерфейсов метаданных.

Я импортировал mscoree.tlb, но, похоже, он не включает нужные мне интерфейсы.

Интересующие меня интерфейсы включают IMetaDataEmit . Любой пример кода, относящийся к этому, был бы очень полезен, хотя я пока не смог его найти.

C # сэмплов было бы хорошо, так как я могу легко конвертировать их в F #.

Заранее спасибо всем, кто может помочь мне с этим довольно загадочным запросом!

Обновление: Теперь я отсортировал это, написав явные ссылки на COM с использованием идентификаторов GUID интерфейса!

Ответы [ 2 ]

1 голос
/ 04 января 2009

Надеюсь, вы нашли образец mdbg , который включает в себя исходный код для упаковки именно тех интерфейсов, которые вам нужны.

1 голос
/ 24 октября 2008

Один из вариантов здесь - создать свой собственный проект и скомпилировать эти интерфейсы (используя их определения из cor.h) в библиотеку типов, которую затем вы можете добавить в управляемую сборку. Я понимаю, что было бы довольно утомительно преобразовывать код заголовка C в IDL, но это могло бы быть автоматизировано (или частично автоматизировано) некоторыми сценариями обработки текста.

...