作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
所以我在 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_as
将 System::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/
我是一名优秀的程序员,十分优秀!