繁体   English   中英

Windows GUI和本机C ++

[英]Windows GUI and native C++

我正在做一个名为“ C ++游戏开发”的学生项目。 这是带有客户端和服务器的纸牌游戏。 客户端应用程序包含一些我已经在Visual Studio 2013中使用Windows窗体制作的窗口。对于客户端/服务器通信,我决定使用Internet通信引擎(ICE) 在构建客户项目期间,我在ICE自动生成的代码中出错。 我发现ICE不支持C ++ / CLI,仅支持本机C ++或C#(我不能使用)。

所以现在我处在十字路口,无论是使用本机C ++来制作整个客户端应用程序(这意味着,例如,使用我不熟悉的MFC)还是同时使用本机C ++和C ++ / CLI(请完成我所做的工作)使用Windows窗体到CLR类库,并从带有入口点的本机C ++项目链接到它,这也不是小事。

我正在尝试选择耗时较少的选项。 我想帮助我估计这些方法的复杂性。 我更喜欢第二个,但我不确定这是最简单的。

这取决于您的GUI中已经有多少复杂性。 如果您有一百个对话框/控件,那么用本机C ++重写它可能是错误的答案。 在这种情况下,使您的GUI成为库更有意义。

但是,将GUI保持为进程并在本机C ++中构建一个将ICE调用传递到服务器上的代理库可能是一个更好的选择。 (因此C ++ / CLI exe会调用新的C ++库中的函数,该函数会对服务器进行ICE调用,反之亦然)。

如果您的GUI很小,那么最好在现代的系统中(最好是在C ++ / CLI的支持下)重写它。 Qt可能是当今本机GUI的终极产品(但还有其他替代品,例如MFC或wxWidgets)。 即使在这些情况下,仍然最好将网络子系统编码为本机库。 然后,您可以更改GUI并尝试任意加载GUI堆栈,只需更改一次表示层即可将游戏移植到Android或iOS。

第三种选择是选择不同的通讯系统。 虽然像ICE这样的RPC很不错,但今天的“优势所在”是通过REST服务进行的基于Web的通信(尝试使用像Mongoose或NxWeb之类的嵌入式c ++网络服务器),如果您需要将数据推回客户端,则这些都支持WebSockets,因此将提供您需要的所有功能。 然后,您可以将GUI重写为基于HTML!

所以:将您的通讯放入本机C ++库中。

C ++ / CLI可以使用本机C ++代码。

将生成的代码粘贴到不带/clr的“静态库项目”中。 然后列出该静态库作为C ++ / CLI DLL的依赖项。

链接器将找出其余部分。 结果称为“混合模式组装”。

请注意,您的通讯库可能不接受托管类型。 没关系,C ++ / CLI可以很好地混合非托管数据模型和托管视图(UI)类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM