winforms 返回system::string的数组

l7mqbcuq  于 2023-05-29  发布在  其他
关注(0)|答案(1)|浏览(142)

尝试返回system::string的数组
我是c++的新手,我试图返回一个字符串数组,但似乎有点困难。

public: array<String^>^  getData() {
        
        return {tb1->Text,tb2->Text,tb3->Text,tb4->Text,tb5->Text,tb6->Text };

    }

结核病的是文本框(我的工作在一个窗口形式).这个字符串和普通字符串有什么不同?是否可以使用常规字符串代替?或者将它们转换为常规字符串,反之亦然。

xoshrz7s

xoshrz7s1#

好吧,你有几个问题。
主要问题:如何返回字符串数组:您的思路是正确的,但我认为编译器不能完全推断出它需要执行gcnew cli::array<String^>。所以你明确地这样做。

return gcnew cli::array<String^>{ tb1->Text, tb2->Text, tb3->Text, tb4->Text, tb5->Text, tb6->Text };

注意事项:

  • 我喜欢使用cli::array而不是array,以表明我们不是在处理非托管std::array,但如果您不想这样做,也可以不这样做。

附带问题:这个字符串和普通字符串有什么不同?是否可以使用常规字符串代替?或者将它们转换为常规字符串,反之亦然。

  • 这个字符串有什么不同:这些是托管字符串。或者换句话说,这些是C#字符串,而“常规”字符串是C字符串。它的全名是System::String,而不是std::string。为了处理这些托管字符串,你需要管理你的代码:这意味着您将编写托管类,并调用.Net库(而不是C库)来操作这些字符串。
  • 可以使用regular:对于WinForms和TextBox,没有。这些是.Net组件,因此它们使用托管字符串。另外,我对C++/CLI的建议是以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#编程通常更容易,你需要手动做的事情更少。

相关问题