为Winforms项目包含< msclr/marshal.h>时出错

gt0wga4j  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(175)

再见
我正在使用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

vwhgwdsa

vwhgwdsa1#

好的。所以,我刚刚从使用c20转换到c17语言标准,它为我解决了这个问题。祝你好运。

相关问题