Подскажите пожалуйста, как можно использовать С++ dll скомпилированную с опцией CLI:pure (содержащую только managed код) сборкой на C#.
Код самый примитивный, тестовый — в dll есть объявление класса
namespace CPP_Prototype {
public value class Calculation
{
public:
int Calculate();
};
}
и определение
namespace CPP_Prototype {
int Calculation::Calculate()
{
return 42;
}
}
И получаю в рантайме BadImageFormatException (Could not load file or assembly 'CPP_Prototype, Version=1.0.3635.33222, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.)
Я ведь не ошибаюсь, можно использовать managed C++-код без DllImport? Технология IJW, все дела...
Здравствуйте, deppp, Вы писали:
D>Подскажите пожалуйста, как можно использовать С++ dll скомпилированную с опцией CLI:pure (содержащую только managed код) сборкой на C#. D>Код самый примитивный, тестовый — в dll есть объявление класса D>....
Я запустил ваш пример, и у меня все заработало.
(Visual Studio 2010 Ultimate beta2)
Здравствуйте, deppp, Вы писали:
D>Подскажите пожалуйста, как можно использовать С++ dll скомпилированную с опцией CLI:pure (содержащую только managed код) сборкой на C#. D>Код самый примитивный, тестовый — в dll есть объявление класса
D>И получаю в рантайме BadImageFormatException D>(Could not load file or assembly 'CPP_Prototype, Version=1.0.3635.33222, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.)
D>Я ведь не ошибаюсь, можно использовать managed C++-код без DllImport? Технология IJW, все дела...
Так ты битность для C# проекта укажи, Any CPU не катит.
Если руки золотые, не важно из какого места они растут.
S>Так ты битность для C# проекта укажи, Any CPU не катит.
Работает с target = "Any CPU"
D>(Could not load file or assembly 'CPP_Prototype, Version=1.0.3635.33222, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.)
Сегодня проверил на работе еще в Visual Studio 2008 под .Net Framework. У меня все заработало.
Может вы как-то неправильно создаете проект для C++/CLI (возможно у него неправильные настройки)?
Я пробовал два варианта:
1) Создать CLR Console Application и установить у него "Pure MSIL Common Language Runtime Support (/clr:pure)" и "Dynamic Library (.dll)"
2) Создать обычную Windows DLL и установить те же параметры, так же удалить функцию DllMain
Опишите, пожалуйста, подробнее что вы делали и какую версию фреймфорка использовали
Здравствуйте, _Eter_, Вы писали:
S>>Так ты битность для C# проекта укажи, Any CPU не катит.
_E_>Работает с target = "Any CPU"
Дело действительно было с битностью, но не в Platform (тут можно оставить Any CPU), а в Platform target (здесь оказывается надо было выставить x86, у меня по умолчанию стояло Any CPU и здесь, а операционка 64битная (Windows 7)
_E_>Сегодня проверил на работе еще в Visual Studio 2008 под .Net Framework. У меня все заработало. _E_>Может вы как-то неправильно создаете проект для C++/CLI (возможно у него неправильные настройки)?
_E_>Я пробовал два варианта: _E_>1) Создать CLR Console Application и установить у него "Pure MSIL Common Language Runtime Support (/clr:pure)" и "Dynamic Library (.dll)" _E_>2) Создать обычную Windows DLL и установить те же параметры, так же удалить функцию DllMain
_E_>Опишите, пожалуйста, подробнее что вы делали и какую версию фреймфорка использовали
Фреймворк 3.5, MS Visual Studio 2008. Но дело, как уже было сказано, оказалось в битности.
Спасибо!
Здравствуйте, deppp, Вы писали:
S>>>Так ты битность для C# проекта укажи, Any CPU не катит.
_E_>>Работает с target = "Any CPU"
D>Дело действительно было с битностью, но не в Platform (тут можно оставить Any CPU), а в Platform target (здесь оказывается надо было выставить x86, у меня по умолчанию стояло Any CPU и здесь, а операционка 64битная (Windows 7)
Конечно, чудес не бывает
Есть solution platform и target platform на проjекте, я имел ввиду последнюю.
Info: solution platform это просто конфигурация билда солюшена, т.е. она определяет какие проекты как собирать (или не собирать) при выбранной данной конфигурации. Заметь, ты можешь создать solution platform с любым именем, что весьма удобно
Если руки золотые, не важно из какого места они растут.