再见
我正在使用Winforms C++/CLI制作一个项目。
到目前为止,我的目标是写一个函数,将用户的输入从文本框转换。从我所能收集到的信息来看,我基本上是从System::String^
类型转换为std::string
类型。
然而,每当我输入<msclr/marshal.h>
时,我都会得到大约50个错误(以下是前四个):
1>C:\Program Files(x86)\Windows Kits\10\Include\10.0.19041.0\um\objidl.h(12152,71):错误C3699:“”:无法在类型“IDataObject”上使用此间接寻址
1>C:\Program Files(x86)\Windows Kits\10\Include\10.0.19041.0\um\objidl.h(12152,71):消息:编译器将“”替换为“^”以继续解析
1>C:\Program Files(x86)\Windows Kits\10\Include\10.0.19041.0\um\objidl.h(12167,5):错误C2371:'IDataObject':重新定义;不同基本类型
1>C:\Program Files(x86)\Windows Kits\10\Include\10.0.19041.0\um\objidl.h(590,31):消息:请参见“IDataObject”的声明
我已经确认错误来自于我,包括<msclr/marshal.h>
,因为仅仅包含该头文件就会导致上述错误弹出。
为了解决我的问题,我尝试研究如何将System::String^
转换为std::string
。但是,令我沮丧的是,几乎所有的事情都围绕着使用<msclr/marshal.h>
。而且,虽然有一些解决方案使用了<locale>
和<codecvt>
,但所有这些解决方案都导致了大量的错误。
我还打开了objidl.h
,但是,我甚至无法开始想象我如何远程理解我需要做什么来修复代码;(1)因为我没有写它,(2)我是一个菜鸟程序员,只在他的第一年的CS。
最后,感谢所有的帮助。非常感谢您抽出时间。
convert.cpp:
#include "convert.h"
#include <string>
#include <msclr/marshal_cppstd.h>
using namespace System;
std::string sysStr_stdStr(String^ value)
{
return msclr::interop::marshal_as<std::string>(value);
}
字符串
convert.h:
#ifndef CONVERT_H
#define CONVERT_H
#include <string>
std::string sysStr_stdStr(System::String^ value);
#endif // !CONVERT_H
型
1条答案
按热度按时间vwhgwdsa1#
好的。所以,我刚刚从使用c20转换到c17语言标准,它为我解决了这个问题。祝你好运。