Visual C++ - problem z biblioteką Eigen przy tworzeniu aplikacji okienkowej

0

Witam

W swoim programie chcę użyć Eigen(http://eigen.tuxfamily.org/), niestety nie mogę skompilować programu gdy chcę wykorzystać cokolwiek z tej biblioteki.

e:\program files (x86)\microsoft visual studio 9.0\vc\include\eigen\src\core\densestorage.h(102) : error C2472: 'Eigen::DenseStorage::DenseStorage' cannot be generated in managed code: 'Aligned data types not supported in managed code'; compile with /clr to generate a mixed image
e:\program files (x86)\microsoft visual studio 9.0\vc\include\eigen\src\core\plainobjectbase.h(396) : error C2472: 'Eigen::PlainObjectBase >::PlainObjectBase >' cannot be generated in managed code: 'Aligned data types not supported in managed code'; compile with /clr to generate a mixed image
e:\program files (x86)\microsoft visual studio 9.0\vc\include\eigen\src\core\matrix.h(217) : error C2472: 'Eigen::Matrix::Matrix' cannot be generated in managed code: 'Aligned data types not supported in managed code'; compile with /clr to generate a mixed image
d:\uczing\mmm\projekt vs 2008\test\test\form1.h(74) : error C2472: 'test::Form1::Form1_Load' cannot be generated in managed code: 'Aligned data types not supported in managed code'; compile with /clr to generate a mixed image

Results  

Próbowałem kompilować z /clr ale jest jeszcze więcej błędów

Jak robię program na konsolę, to wszystko działa. Z góry dzięki za pomoc

0

z komunikatów wynika, że program powinien być kompilowany z opcją /clr, a ty używasz /clr:pure albo/clr:safe.

0

Próbowałem z /clr

d:\uczing\mmm\projekt vs 2008\mmm projekt\mmm projekt\Form1.h(357) : error C3821: 'void MMMProjekt::Form1::symulujButton_Click(System::Object ^,System::EventArgs ^)': managed type or function cannot be used in an unmanaged function
        Aligned data types not supported in managed code
d:\uczing\mmm\projekt vs 2008\mmm projekt\mmm projekt\Form1.h(356) : error C3645: 'MMMProjekt::Form1::symulujButton_Click' : __clrcall cannot be used on functions compiled to native code

Dostaję coś takiego. W programie jest tylko jeden przycisk, który tworzy macierz:

private: System::Void symulujButton_Click(System::Object^  sender, System::EventArgs^  e) {
		 			 Matrix<float, 4, 4> z;}
0

Masz przecież w błędach odpowiedź. Utwórz nową funkcję, która będzie niezarządzana (możesz wymusić poprzez #pragma unmanaged), zawrzyj w niej wszystko, co ma dotyczyć typu Matrix i wywołaj tę funkcję z twojej metody obsługującej kliknięcie na przycisk.

0

Wielkie dzięki. Nie wszystko dla mnie jest takie oczywiste, jestem jeszcze trochę noobem w kwestiach programowania :)

0

@Rev: no bez przesady, komunikat nie jest taki oczywisty: "managed type or function cannot be used in an unmanaged function" -- kompilator się czepia że nie można użyć typu Object^ jako parametru, bo nie wiedzieć czemu tę funkcję traktuje jako „unmanaged”…
Gdyby błąd brzmiał: "Aligned data type 'Matrix' cannot be used in managed code" albo podobnie, przyczyna byłaby jasna na podstawie samego komunikatu.

0

Gdyby błąd brzmiał: "Aligned data type 'Matrix' cannot be used in managed code" albo podobnie, przyczyna byłaby jasna na podstawie samego komunikatu.

Cały czas przewija się tam błąd mówiący o tym, że nie można stosować typów ze specyfikatorem __declspec(align(x)) w kodzie zarządzanym.

0

a wystarczy dodać parametr DontAlign i będzie się kompilować jako CLR.

		  Matrix<float,4,4,Eigen::DontAlign> m;

1 użytkowników online, w tym zalogowanych: 0, gości: 1