如何将C#中的字符串列表返回到托管c ++

时间:2015-06-09 05:53:16

标签: c# c++

在托管C ++中添加C#dll作为引用,并在c ++中调用C#函数返回字符串列表

C#代码:

namespace ManagedCSharp
{   
  public static class ManagedClass
    {
        public static List<string> ShowValue(void)
        {
            List<string> x = new List<string>();
            x.Add("1");

            return x;

        }
    }
}

C ++代码:

public ref class DoWork
    {
    public:void GetListOfStrings(void)
        {           
           //here i need to collect list of strings returned from C#
            (??) =  ManagedCSharp::ManagedClass::ShowValue();   
        }
    };

提前致谢

2 个答案:

答案 0 :(得分:1)

如果您使用的是托管C ++,则只需使用:

List<string>^ myvar = ManagedCSharp::ManagedClass::ShowValue();

当然,您必须为System :: Collections添加using指令。

答案 1 :(得分:0)

首先,我将使用C ++ / CLI进行互操作。恕我直言,如果你正在混合C ++和C#代码,生活很轻松。

在这种情况下,明确命名空间实际上有助于使事情变得清晰。 C ++通常使用std::string,可以转换为char*; C ++ / CLI使用System::String,可以从System::Char*构造(gcnew) - 这是UTF-16字符。要进行转换,您需要应用编码,该编码可在System::Text::Encoding::ASCII::GetString中找到。 (或UTF-8或你用作毒药的任何东西)。这取决于您在std::string中添加的内容。

请注意,C ++和C#中的内存管理工作方式完全不同。你仍然需要在非托管堆上清理你的东西(如果适用的话); System::String的构造函数只是将内容复制到托管容器中。