在托管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();
}
};
提前致谢
答案 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
的构造函数只是将内容复制到托管容器中。