gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:18:07 25 4
gpt4 key购买 nike

所以我在 clr 中工作,在 Visual C++ 中创建 .net dll。

我相信这样的代码:

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

有编码器通常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

error C4996:'msclr::interop::error_reporting_helper<_To_Type,_From_Type>::marshal_as':库不支持此转换或不包含此转换所需的头文件。请参阅有关“如何:扩展编码(marshal)处理库”的文档以添加您自己的编码(marshal)处理方法。

怎么办?

最佳答案

如果您使用的是 VS2008 或更新版本,您可以使用 automatic marshaling added to C++ 非常简单地完成此操作.例如,您可以通过 marshal_asSystem::String^ 转换为 std::string :

System::String^ clrString = "CLR string";
std::string stdString = marshal_as<std::string>(clrString);

这与用于 P/Invoke 调用的编码(marshal)处理相同。

关于.net - 如何将 System::String^ 转换为 std::string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3539334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com