.net – 如何将System :: String ^转换为std :: string?

.net – 如何将System :: String ^转换为std :: string?,第1张

概述所以我在clr中工作,在visual c中创建.net dll. 我这样的代码: static bool InitFile(System::String^ fileName, System::String^ container){ return enc.InitFile(std::string(fileName), std::string(container));} 有编码器,norm 所以我在clr中工作,在visual c中创建.net dll.

我这样的代码:

static bool Initfile(System::String^ filename,System::String^ container){    return enc.Initfile(std::string(filename),std::string(container));}

有编码器,normaly resives std :: string.但是如果我从std :: string和C2440中删除通常相同的参数,那么编译器(visual studio)会给出C2664错误. VS告诉我它无法将System :: String ^转换为std :: string.

所以我很伤心……我该怎么做才能将System :: String ^变成std :: string?

更新:

现在有了你的帮助,我有了这样的代码

#include <msclr\marshal.h>#include <stdlib.h>#include <string.h>using namespace msclr::interop;namespace NsstW{  public ref class CFEW  { public:     CFEW() {}     static System::String^ echo(System::String^ stringToReturn)    {        return stringToReturn;      }     static bool Initfile(System::String^ filename,System::String^ container)    {           std::string sys_filename = marshal_as<std::string>(filename);;        std::string sys_container = marshal_as<std::string>(container);;        return enc.Initfile(sys_filename,sys_container);    }...

但是当我尝试编译时,它给了我C4996

错误C4996:’msclr :: interop :: error_reporting_helper< _To_Type,_From_Type> :: marshal_as’:库不支持此转换,或者不包括此转换所需的头文件.有关添加自己的编组方法的信息,请参阅“如何:扩展封送库”的文档.

该怎么办?

解决方法 如果您使用的是VS2008或更新版本,则可以使用 automatic marshaling added to C++非常简单地执行此 *** 作.例如,您可以通过 marshal_as将System :: String ^转换为std :: string:
System::String^ clrstring = "CLR string";std::string stdString = marshal_as<std::string>(clrstring);

这与用于P / Invoke调用的编组相同.

总结

以上是内存溢出为你收集整理的.net – 如何将System :: String ^转换为std :: string?全部内容,希望文章能够帮你解决.net – 如何将System :: String ^转换为std :: string?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1237527.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存