我一直在尝试找到一种方法,将std::向量从本机C++代码传递到C++/CLI托管类中的静态方法中。我是C++(非托管)的新手,所以我在这方面运气不佳也就不足为奇了。我想要的是一些关于如何将std:vector(任何类型,但最好是double或int)转换为托管C++/CLI数组和/或C#数组的指针。也许这是不可能的,因为我只看到了相反的例子(即C#到原生C++),例如,请参阅"将System::array转换为std::vector"。下面我总结一下我失败的尝试。
我可以通过像这样的双矢量
vector<vector<double> > dblvec
转换为在本机C++类中定义的方法(其中该类在C++/CLI项目中),但不转换为在ref类中定义(也在C++/CCLI项目中)的方法。commiler抱怨方法(在ref类中)不存在(候选函数不可访问)。我认为这与vector>被聚焦为私有变量有关(例如,请参见C++CLI错误C3767:候选函数不可访问)。
如有任何帮助,我们将不胜感激。
是的,您基本上对原因是正确的(本机类型在程序集之外不是公共的)。由于模板化的类型不能公开(即使使用make_public pragma),因此您也无法轻松修复它。
您需要阅读以下内容以获得解决方法:编译器错误C2158的最佳解决方法:make_public不支持本机模板类型
祝你好运!