управляемая и неуправляемая статическая библиотека c ++

У меня есть управляемая сборка C ++ с простым кодом.

Эта сборка имеет смешанный (управляемый / неуправляемый) код. Если я помещаю неуправляемый код в отдельную неуправляемую статическую библиотеку и связываю ее с управляемым кодом, я получаю следующую ошибку регистрации: «Не удалось загрузить 'xxxxxx.dll', потому что это недопустимая сборка .NET» .

Если я помещу весь код в один проект и соберу его вместе, тогда все будет работать нормально. Я пробовал это на VS2008 + .NET3.5 + RegAsm .Net2.0. Моя сборка подписана.

Я хотел бы сохранить разделение кода для неуправляемой статической библиотеки и управляемой сборки.

Что я должен сделать?

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


person yuriv    schedule 23.05.2011    source источник
comment
Как он может содержать смешанный код? .. Вы говорите вместо этого о небезопасном коде? тогда это еще удалось ..   -  person vines    schedule 23.05.2011
comment
нет, он говорит о сборке в смешанном режиме, см. msdn.microsoft.com/en- us / library / x0w2664k.aspx   -  person Yaur    schedule 23.05.2011
comment
удалил свой ответ, потому что он был неправильным. взгляните на этот связанный вопрос SO, который, я думаю, вам поможет. stackoverflow.com/questions/2691325/   -  person Yaur    schedule 23.05.2011
comment
Это автоответчик ;-). Я провел несколько экспериментов и вот некоторые мои проблемы: 1. Если вы хотите использовать статические библиотеки с неуправляемым кодом в управляемом проекте C ++, вам необходимо скомпилировать его с параметром / clr. 2. Будьте осторожны с оптимизацией кода неуправляемой библиотеки (иногда я получаю сообщение вроде ... поврежден образ библиотеки во время релизной компиляции управляемого проекта). 3. Если вы хотите работать с чистым неуправляемым кодом (без компиляции / clr) и небольшими затратами времени и места, попробуйте включить неуправляемый код, например неуправляемую библиотеку dll (я использую библиотеку boost, например dll). по моему мнению   -  person yuriv    schedule 25.05.2011


Ответы (1)


Ваша библиотека должна быть построена для динамического использования среды выполнения C ++ (начиная с .NET 2.0).

В свойствах проекта откройте C / C ++ и перейдите в раздел «Генерация кода». Найдите библиотеку времени выполнения и установите для выпуска многопоточную DLL, а для отладки - многопоточную DLL-библиотеку отладки.

person Lou Franco    schedule 23.05.2011