繁体   English   中英

将字符串从C ++ / CLI类库传递到C#

[英]passing string from C++/CLI class library to C#

我在VS 2010 C ++ / CLI中编写了一个类库,并创建了一个dll。

// testclass.h
#pragma once

#include <string>

namespace test
{
    public ref class testclass
    {
      public:
         std::string getstringfromcpp()
         {
            return "Hello World";   
         }
    };
}

我想在C#程序中使用它,然后添加此dll进行引用:

using test;
... 
testclass obj = new testclass();
textbox1.text = obj.getstringfromcpp();
...

我该怎么办?

对于互操作方案,您需要返回一个字符串对象,您可以从.NET代码中读取该对象。

不要返回std::string (在C#中没有这样的东西)或const char * (可从C#读取,但您必须管理内存释放)或类似的事情。 而是返回System::String^ 这是.NET代码中的标准字符串类型。

这将起作用:

public: System::String^ getStringFromCpp()
{
    return "Hello World";   
}

但是,如果实际上有const char *std::string对象,则必须使用marshal_as模板:

#include <msclr/marshal.h>
public: System::String^ getStringFromCpp()
{
    const char *str = "Hello World";
    return msclr::interop::marshal_as<System::String^>(str);
}

有关更多详细信息,请阅读C ++中的封送处理概述


要将System::String^转换为std::string还可以使用marshal_as模板,如上面的链接所述。 您只需要包含其他标题:

#include <msclr/marshal_cppstd.h>
System::String^ cliStr = "Hello, World!";
std::string stdStr = msclr::interop::marshal_as<std::string>(cliStr);

在我的程序中,它以某种方式拒绝将std :: string直接转换为System :: String ^,但是使用char *强制转换==> std :: string.c_str()

public: System::String^ getStringFromCpp()
{
    std::string str = "Hello World";
    return msclr::interop::marshal_as<System::String^>(str.c_str());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM