Использование библиотек /clr и noclr в одном проекте

Я столкнулся с некоторыми проблемами с одним проектом. Мне нужно использовать две библиотеки, но одну нужно скомпилировать с переключателем /clr, так как другую нельзя скомпилировать с этим переключателем.

Есть ли способ одновременно использовать эти две библиотеки в одном проекте? В настоящее время он скомпилирован с /clr, и я получил ошибки компоновки с библиотекой noclr.

Если нет решения, я все еще могу запустить библиотеку noclr в пакетном режиме, но я бы хотел этого избежать...

Мой проект находится на управляемом C++, библиотека tetgen, для которой требуется /clr, находится в native C++ и не может быть скомпилирован без переключателя /clr, так как я получаю эту ошибку

ошибка C3381: 'tetgenio': спецификаторы доступа к сборке доступны только в коде, скомпилированном с параметром /clr

Другая библиотека triangle находится на C. Я использую Visual Studio 2008 и проект скомпилирован в 32 бита.


person ccote    schedule 21.10.2010    source источник
comment
Можете ли вы дать нам более подробную информацию о вашем проекте? то есть язык? Платформа? так далее..   -  person C Johnson    schedule 21.10.2010
comment
Дополнительные детали пока довольно тонкие. Является ли tetgen родным или управляемым? Пожалуйста, используйте избыток деталей, а НЕ минимум.   -  person C Johnson    schedule 21.10.2010
comment
Скажите, если вам нужно что-то еще, я не могу придумать, что добавить.   -  person ccote    schedule 21.10.2010
comment
Вы хотели поставить запятую после /clr? Без него смысл вашего предложения неоднозначен. Является ли библиотека tetgen родной или управляется вашим «проектом». Или тетген управляемый, а тетген родной?   -  person C Johnson    schedule 21.10.2010
comment
Да, я имел в виду. Tetgen находится на Native C++, мой проект находится под управлением.   -  person ccote    schedule 21.10.2010
comment
У вас есть ошибки компоновщика. Опубликуйте ошибки.   -  person Hans Passant    schedule 21.10.2010


Ответы (2)


Мы могли бы использовать больше деталей, но при использовании управляемого C++ вы, безусловно, можете использовать сочетание управляемого и неуправляемого кода. (Microsoft называет свой управляемый код C++ C++/CLI.)

РЕДАКТИРОВАТЬ:

Хорошо, ваша ошибка компилятора помогла. По-видимому, вы указали собственный класс, но использовали общедоступный частный или какой-либо другой спецификатор доступа к имени собственного класса. Из документов MSDN:

Следующий пример генерирует C3381:

// C3381.cpp
**public** class A {   // C3381. Remove public or make the class
managed. }; 
int main() { }

так что избавьтесь от ключевого слова public и повторите попытку компиляции.

person C Johnson    schedule 21.10.2010
comment
Я только что добавил некоторые детали. - person ccote; 21.10.2010

Вы можете иметь несколько проектов в одном решении. Щелкните правой кнопкой мыши решение в проводнике eolution и добавьте -> существующий/новый проект. Каждый библиотечный проект может быть добавлен таким образом и иметь свои собственные настройки clr.

person insipid    schedule 21.10.2010
comment
Этот проект фактически является частью решения из 10 проектов. Я просто не могу связать библиотеку noclr со своим проектом, у меня есть некоторые ошибки связывания. Я попытался связать эту библиотеку с созданным мной проектом, не скомпилированным с помощью /clr и содержащим только вызов своих функций, и он работает. Затем, когда я связываю этот промежуточный проект со своим исходным проектом, компилятор говорит, что не может найти заголовок библиотеки noclr в промежуточном проекте. - person ccote; 21.10.2010