如何使用跨平台C++;使用WPF C#GUI
我目前在一个项目中,需要在Mac和Windows上工作。对于所有的应用逻辑,我们使用标准的便携式C++。然而,由于我们希望应用程序在这两个平台上都能感觉完全是本地的,GUI将使用C#/WPF(适用于Windows)和Objective-C/Cocoa(适用于Mac)编写如何使用跨平台C++;使用WPF C#GUI,c#,c++,cross-platform,C#,C++,Cross Platform,我目前在一个项目中,需要在Mac和Windows上工作。对于所有的应用逻辑,我们使用标准的便携式C++。然而,由于我们希望应用程序在这两个平台上都能感觉完全是本地的,GUI将使用C#/WPF(适用于Windows)和Objective-C/Cocoa(适用于Mac)编写 但是,对于Windows部分,我想知道用C语言来使用C++代码的最佳方法是什么。C是管理的,我知道我们也可以使用托管C++。但是我担心在CLR中使用C++可能会引入意外的bug,或者我们需要在C++代码中到处放置大量的μiIFD
但是,对于Windows部分,我想知道用C语言来使用C++代码的最佳方法是什么。C是管理的,我知道我们也可以使用托管C++。但是我担心在CLR中使用C++可能会引入意外的bug,或者我们需要在C++代码中到处放置大量的μiIFDEF Win32,使之与管理的CLR和Mac OS X的非托管环境一起工作(注意我们确实希望放一些IFDEF,但是如果可能的话,我们希望保持它的控制)。所以,基本上,使用C++代码和C++代码的最佳方式是什么?现在,我正在考虑三种解决方案
< 1 >将C++编译为C++/CLI,直接使用C语言中的类和函数。2编译并将C++封装到一个非托管Win32 DLL中,并使用DLLimPosiv/P>从C调用它。
3——将COC++打包在COM包装器中,并使用.NETCOM互操作将其与C<< /P>链接起来。
哪种方法最好?或者,如果有更好的解决方案,它是什么?
C++ +CLI对标准C++有几个限制,但并不总是容易将标准C++重新编译为C++/CLI。请记住,首先您必须区分“托管”和“非托管”指针。因为它们使用了不同的符号,所以您的第一组ifdef就在那里。然后你就可以学习ref和value类,以及所有那些有趣的东西
但是,您可以使用C++/CLI来弥合本机代码与.NET世界之间的鸿沟。上次我按照您的计划做了一些事情时,我使用C++/CLI编写了桥接层,它在.NET类型和类与本机世界之间执行了必要的转换和转换工作。显然,C++/CLI层可以从任何.NET语言使用 您不能总是使用(2)-这在很大程度上取决于您试图在两个世界之间交换的数据类型。NET编组代码非常擅长处理C POD,但如果处理得更复杂,您就会遇到问题(3) 是过度杀戮IMHO并引入另一个失败点,另外,如果您创建了自己的桥接代码,那么您将使用.NET COM本机而不是更简单的.NET本机。更不用说,你增加了代码的复杂性,这将不利于你正在瞄准的其他OS,即OS x.< /p> C++ +CLI,对标准C++有一些限制,但并不总是容易将标准C++重新编译为C++/CLI。请记住,首先您必须区分“托管”和“非托管”指针。因为它们使用了不同的符号,所以您的第一组ifdef就在那里。然后你就可以学习ref和value类,以及所有那些有趣的东西 但是,您可以使用C++/CLI来弥合本机代码与.NET世界之间的鸿沟。上次我按照您的计划做了一些事情时,我使用C++/CLI编写了桥接层,它在.NET类型和类与本机世界之间执行了必要的转换和转换工作。显然,C++/CLI层可以从任何.NET语言使用 您不能总是使用(2)-这在很大程度上取决于您试图在两个世界之间交换的数据类型。NET编组代码非常擅长处理C POD,但如果处理得更复杂,您就会遇到问题
(3) 是过度杀戮IMHO并引入另一个失败点,另外,如果您创建了自己的桥接代码,那么您将使用.NET COM本机而不是更简单的.NET本机。更不用说,您的代码增加了复杂性,这对您所针对的其他操作系统(即OS X)没有好处。我们的开发团队已经在ASP.NET和WPF前端使用了C++/CLI编译代码 我们遇到的第一个主要问题是构建时间。代码库将是150k行(40多个项目),链接需要花费很长时间(由于链接器问题,我们无法将单个项目构建为DLL)。我们只能通过用托管C++类封装代码并将项目作为程序集来解决这个问题。 第二个主要问题是绩效。我们最初编译了/CLR(在纯选项存在之前),这导致了我们在托管C++层中发生的大部分调用的双中继。我们通过切换到/clr:pure解决了这个问题。这样我们就遇到了一个麻烦
程序集中的“全局”方法太多,因此无法加载。为了解决这个问题,我们不得不进一步拆分程序集。我们的开发团队已经在ASP.NET和WPF前端使用了C++/CLI编译代码 我们遇到的第一个主要问题是构建时间。代码库将是150k行(40多个项目),链接需要花费很长时间(由于链接器问题,我们无法将单个项目构建为DLL)。我们只能通过用托管C++类封装代码并将项目作为程序集来解决这个问题。 第二个主要问题是绩效。我们最初编译了/CLR(在纯选项存在之前),这导致了我们在托管C++层中发生的大部分调用的双中继。我们通过切换到/clr:pure解决了这个问题。这样我们就遇到了一个麻烦
程序集中的“全局”方法太多,因此无法加载。我们必须进一步拆分程序集以解决此问题。最好且更简单的方法是使用.NET COM,因为COM与.NET内部的本机dll访问相比具有更强的桥接,因为它可能会导致大量内存问题和大量故障排除时间。在任何MFC项目中测试COM和获取跟踪都比较容易