Можем ли мы использовать библиотеки «Boost» в наших собственных библиотеках, скомпилированных в CLR? - PullRequest
1 голос
/ 08 сентября 2010

Так что легко создать проект win 32 и использовать boost. Я еще не пробовал, но планирую. Интересно, могу ли я использовать повышение в режиме CLR. Является ли это возможным? Кто-нибудь пробовал?

1 Ответ

3 голосов
/ 08 сентября 2010

Да, это не должно быть проблемой. Существует очень мало собственных конструкций C ++, которые не могут быть переведены в IL. Раньше у Вараргса была проблема, но она была решена, я только знаю, что __fastcall как непереводимый. Не будет проблемой, Boost не будет его использовать. Единственная другая проблема, о которой я знаю, это наличие множества глобальных переменных. Они должны быть встроены в класс CLR, и класс не может иметь более 65535 полей. Вы получите исключение, когда загрузчик CLR попытается загрузить сборку. Для того, чтобы приблизиться к этому ограничению, вам понадобится какой-то красивый, ну, специальный код.

Второстепенное соображение заключается в том, имеет ли это смысл. Смысл использования нативного кода в первую очередь заключается в том, чтобы использовать время, которое оптимизатор кода может потратить на его оптимизацию. Вы отказываетесь от этого, переводя код на IL, и оптимизатор JIT не имеет такой же роскоши.

Использование C ++ Interop, оно может переводить из управляемых типов значений в нативные типы без необходимости написания связующего кода. Просто выключите генерацию IL на лету. Как это:

#pragma managed(push, off)
// Native code goes here
//...
#pragma managed(pop)
// Managed code goes here
...