尝试返回system::string的数组
我是c++的新手,我试图返回一个字符串数组,但似乎有点困难。
public: array<String^>^ getData() {
return {tb1->Text,tb2->Text,tb3->Text,tb4->Text,tb5->Text,tb6->Text };
}
结核病的是文本框(我的工作在一个窗口形式).这个字符串和普通字符串有什么不同?是否可以使用常规字符串代替?或者将它们转换为常规字符串,反之亦然。
1条答案
按热度按时间xoshrz7s1#
好吧,你有几个问题。
主要问题:如何返回字符串数组:您的思路是正确的,但我认为编译器不能完全推断出它需要执行
gcnew cli::array<String^>
。所以你明确地这样做。注意事项:
cli::array
而不是array
,以表明我们不是在处理非托管std::array
,但如果您不想这样做,也可以不这样做。附带问题:这个字符串和普通字符串有什么不同?是否可以使用常规字符串代替?或者将它们转换为常规字符串,反之亦然。
System::String
,而不是std::string
。为了处理这些托管字符串,你需要管理你的代码:这意味着您将编写托管类,并调用.Net库(而不是C库)来操作这些字符串。std::string
。(托管字符串天生就是宽字符串,因此您可能希望转换为std::wstring
。)要进行转换,请使用marshal_as方法。#include <marshal_cppstd.h>
,然后是std::wstring cppString = marshal_as<std::wstring>(managedString);
和System::String^ managedString = marshal_as<System::String>(cppString);
。最后是关于C++/CLI的一般免责声明:
这种语言旨在允许C#和C代码共存并轻松地相互调用。它具有C的所有复杂性,C#的所有复杂性,以及它自己的额外复杂性。它从未打算成为主要的开发语言。我的建议是换一种语言。
对于编写WinForms应用程序,我的建议是从C++/CLI切换到C#。这是WinForms的目标语言,您将更容易找到帮助您的资源。
如果你真的想用C写一个GUI,我的建议是放弃C/CLI,使用普通的非托管C++,并使用Microsoft Foundation Classes(MFC)。同样,这里有大量的资源,教你如何用MFC在普通C++中完成任务。
(If如果你不确定你想做哪个开关,我推荐C#和WinForms。用C#编程通常更容易,你需要手动做的事情更少。