Тоже когда-то сталкивался с необходимостью использовать статическую либу в managed c++
осталась заметка, возможно поможет:
Я разобрался с этой ошибкой и нашел решение, которое вроде работает
У меня в коде в отдельной статически линкуемой библиотеке (*.lib) есть статические поля класса
И при запуске программы они инициализируются, как и все остальные статические и глобальные переменные
И вот при их инициализации в рантайме прога падает на ассерте в одном из стандартных файлов
/*
* If this ASSERT fails, a baf pointer has been passed in. It may be
* totally bogus, or it may have been allocated from another heap.
* The pointer MUST come from the 'local' heap.
*/
_ASSERTE(_CrtIsValidHeapPointer(pUserData))
В интернете нашкл, что для исполняего CLR проекта нужно изменить в свойствах Линкера точку входа
Linker->Advanced
Entry Point: main
1) для x32, заменить на:
?mainCRTStartupStrArray@@$$FYMHP$01AP$AAVString@System@@@Z
2) для x64, заменить на:
?mainCRTStartupStrArray@@$$FYMHP$01EAPE$AAVString@System@@@Z
Т.к. она имеет не стандартный вид:
int main(int argc, int** argv)
А такой:
int main(array ^args)
----
https://stackoverflow.com/questions/15188757/how-d...
А по вопросу:
создать через new и хранить указатель на класс, как в стандартном С++
C++:
class myClass
{
};
С++/CLI:
public ref class Form : System::Windpows::Forms
{
public:
Form()
{
example = new myClass();
}
~Form()
{
delete example;
}
private:
myClass * example;
};