【问题标题】:Passing a std::vector from native C++ to managed array in C++/CLI and/or C#将 std::vector 从本机 C++ 传递到 C++/CLI 和/或 C# 中的托管数组
【发布时间】:2012-03-29 23:07:06
【问题描述】:

我一直在尝试找到一种方法,将原生 C++ 代码中的 std::vector 传递到 C++/CLI 托管类中的静态方法中。我是 C++ 新手(非托管),所以我没有运气也就不足为奇了。我想要的是一些关于如何将 std:vector(任何类型,但最好是 double 或 int)转换为托管 C++/CLI 数组和/或 C# 数组的指针。也许这无法做到,因为我只看到了相反的示例(即 C# 到本机 C++),例如参见“convert System::array to std::vector”。下面我总结了我失败的尝试。

我可以传递一个双向量例如

   vector<vector<double> > dblvec

在本地 C++ 类中定义的方法(该类在 C++/CLI 项目中),但不在 ref 类中定义的方法中(也在 C++/CLI 项目中)。编译器抱怨该方法(在 ref 类中)不存在(候选函数不可访问)。我认为这与 vector > 被强制成为私有变量有关(例如参见C++ CLI error C3767: candidate function(s) not accessible)。

任何帮助将不胜感激。

【问题讨论】:

    标签: c++-cli unmanaged managed word-wrap


    【解决方案1】:

    是的,您对原因基本上是正确的(本机类型在程序集之外不公开)。而且你不能轻易地修复它,因为模板类型不能公开(即使使用 make_public pragma)。

    您需要阅读以下内容以了解解决方法: Best workaround for compiler error C2158: make_public does not support native template types

    祝你好运!

    【讨论】:

    • 非常感谢 Matt 的快速回复。我真的很感激这一点。您建议的解决方法是您设计的,所以我想您是一个可以从中获得建议的好人!明天我会看看你的解决方法,看看我是否能理解它并让它适合我的情况。
    猜你喜欢
    • 2011-09-02
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2011-04-30
    • 2013-02-09
    • 2010-12-18
    相关资源
    最近更新 更多