Wrapper C ++ в C ++ / CLI clr: безопасно для C # COM Interop

есть ли способ сделать оболочку clr: безопасной для проекта на C ++ неуправляемым?

Моя маленькая история началась так:
«Боже, тебе нужно сделать проект« C # COM Interop », но в этом должна использоваться« библиотека C ++ », и в результате должен получиться только« один »(dll COM)».
Хорошо, после нескольких дней поиска я понял, что можно использовать библиотеку C ++ двумя способами: добавить в ресурсы и вызвать с помощью PInvoke или создать оболочку C ++ / CLI. С PInvoke у меня не может быть только одна dll (правда?). Поэтому я остановил свой выбор на втором варианте «оболочка C ++ / CLI». Вначале казалось простым, я перекомпилировал библиотеку Visual Studio 2005 в 2010, создал проект CLR (с keypair.snk и повторно подписал) добавил библиотеку. Работает! \ 0 / Теперь я воспользуюсь ILMerge, ооо, что это? Только clr: safe? Почему? Хорошо, я пытаюсь перекомпилировать C ++ / CLI в clr: safe, но появляются ошибки ...

Как я могу это исправить?

Заранее спасибо,


person Cobaia    schedule 20.07.2011    source источник
comment
Я не уверен, как все это связано с COM. Существует три типа взаимодействия: P / Invoke; Взаимодействие с C ++ (кодовое название It Just Works); COM-взаимодействие. Поскольку вы не сообщили нам, какие ошибки появляются, мы никак не можем их исправить.   -  person Ben Voigt    schedule 21.07.2011
comment
возможный дубликат Как связать сборки C # и C ++ в один исполняемый файл?   -  person Ben Voigt    schedule 21.07.2011
comment
@ Бен Фойгт. Ошибка похожа на ошибку C4956: 'const wchar_t *': этот тип не поддается проверке ... После нескольких поисков я понял, что невозможно объединить неуправляемый код с управляемым. Я попробую этот codeblog.larsholm. net / 2011/06 /. если это невозможно, я добавлю ресурсы в dll и использую P / Invoke. Спасибо   -  person Cobaia    schedule 21.07.2011


Ответы (1)


ILMerge не подходит для этого.

Вместо этого вы компилируете C # в .netmodule и передаете его компоновщику C ++ / CLI вместе со всеми объектными файлами C ++ / CLI.

person Ben Voigt    schedule 21.07.2011
comment
Извините, я не могу понять ваш ответ. У меня есть COM C #, это использование (C # lib, который использует C ++ / CLI clr, небезопасно). Хочу развернуть в одной dll. Благодарность - person Cobaia; 21.07.2011
comment
@Cabaia: посмотрите stackoverflow.com/questions/2609056/ - person Ben Voigt; 21.07.2011
comment
Спасибо. Я пробовал встроить неуправляемую DLL в качестве ресурса, если вы извлекаете ее самостоятельно во временный каталог stackoverflow.com/questions/666799/ и работает! Но я не могу использовать GetManifestResourceStream :( поэтому я использовал Properties.Resources.UnmanagedDLL. - person Cobaia; 22.07.2011