编写一些C++/CLI来包装现有非托管C++库后,出现了从托管类型转换为非托管类型的问题。一个简单的例子是将一个std :: string转换为一个System :: String,但是该原则适用于很多类型,即array - > vector。编写了一些转换函数后,我决定将它们打包在一个Assembly中,以便我可以重新使用它们。鉴于全球C++/CLI功能都没有本届大会外面看到我结束了这样的事情跨组件边界将托管C++/CLI类型转换为非托管类型
public ref class ClassJustToContainStaticFunctions
{
public:
static std::string convert(System::String^ s)
{
msclr::interop::marshal_context context;
return(context.marshal_as<std::string>(s));
}
};
这符合正常,但功能转换,因为它使用的非托管类型没有得到由大会外公开可见在签名中,请参阅http://msdn.microsoft.com/en-us/library/ms235607%28v=VS.100%29.aspx了解更多信息。该解决方案通常将
#pragma make_public(std::string)
添加到文件中,我在其他情况下没有问题地完成了这项工作。但是make_public不适用于像std :: string这样的模板类。有关信息,请参阅http://msdn.microsoft.com/en-us/library/ms235343%28v=vs.80%29.aspx。
我发现了一些尝试解决工作的例子,但它们都显得很丑陋。
所以,毕竟,我的问题是我在这里失去了明显的东西?在我看来,从托管类型转换为非托管类型,特别是对于像容器类即STL.NET < - > Unmanged STL这样的东西将是一个常见问题,但经过大量搜索后,我还没有在该主题上找到太多内容。
相关问题:http://stackoverflow.com/questions/4121249/best-workaround-for-compiler-error-c2158-make-public-does-not-support-native-tem仅供参考 –
我已经阅读4121249的问题,这是我提到的“相当丑陋”的工作之一。无论如何感谢 – goneskiing