c++ - 带有 Eigen 的神秘 C++/CLI 托管/非托管错误

标签 c++ visual-studio-2010 c++-cli command-line-interface eigen

我正在处理现有的 Visual Studio 2010 项目,我现在应该将新功能( Eigen 和点云库)添加到现有方法中(我们称之为 foo() ).我现在该项目正在以某种方式使用 C++/CLI。我不得不承认我对 C++/CLI 一无所知,只读了一点。然而,声明和定义 foo() 的类似乎是一个常规的 C++ 类,没有 ref 或任何其他 CLI 标识符。但是在 foo() 中使用了句柄 (var^)。所以我不太确定 foo() 是否是托管函数!?我可以向此函数添加相当多的常规 C++ 代码,但现在我开始使用 Eigen 和 PCL,并发现了一些神秘的错误。例如,当我声明时:

 Eigen::Matrix3f m;

一切正常。但是当我这样做时:

 Eigen::Matrix4f m;

我收到以下错误:

error C2711: 'fooclass::foo' : this functon cannot be compiled as managed, consider using #pragma unmanaged 
error C3821: 'void fooclass::foo(void)': managed type or function cannot be used in an unmanaged function

所以它适用于 3f 而不是 4f!这太奇怪了,这只是一个例子。我无法识别任何模式。在我的理解中,VS 以某种方式认为 Matrix4f 是一个托管函数。

如有任何提示,我将不胜感激!我什至不知道从哪里开始寻找。

最佳答案

我对 CLI 一无所知,但 Matrix3f 和 Matrix4f 之间的唯一显着区别是第二个是矢量化的,并且在内部要求其数据与 __declspec(align(16)).

关于c++ - 带有 Eigen 的神秘 C++/CLI 托管/非托管错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21244077/

相关文章:

c++ - 获取父结构体的成员

asp.net - TFS 不会删除外部 Dll

c++ - 混合调试和发布库/二进制文件 - 不好的做法?

c++ - CToolBar 上不同种类的按钮

c++ - 如何将项目 win32 控制台应用程序转换为 C++ Windows 窗体?

c++ - QTableWidget 右键单击​​事件的问题

c++ - 支持非标准波特率的 Boost::Asio::SerialPort 替代方案?

c++ - 包装一个接受 std::function<double(double)> 的函数,以便传递接受更多参数的函数

c++-cli - C++ CLI 包装器

c# - 当属性中有命名空间前缀时,XmlSerializer 抛出 InvalidOperationException