由于使用了外部库,一些经典的Windows / C ++应用程序无法轻松移动到托管C ++ .net。使用像winforms(甚至是WPF)这样的应用程序的新GUI库是否可行,“放入”新控件来替换陈旧的MFC?
或者它真的不值得,并且需要花费很多时间?
答案 0 :(得分:3)
我发现C ++ / CLI 非常能力。你真的遇到了问题吗?它应该能够直接编译你的MFC项目。
但是在同一个线程中混合WinForms和MFC 可能很困难,因为他们都希望运行自己的消息循环。正如Ray Burns所说,WPF可能与MFC更合作。
答案 1 :(得分:2)
由于IJW,从非托管代码中使用WinForms或WPF非常容易。但是,更加愚蠢的是,您需要在托管代码中编写新组件,并将它们嵌入到非托管应用程序中。这意味着对于所有新东西,您不必处理内存管理等。
WPF比WinForms更强大,更好用,所以如果你还没有使用它,我肯定会绕过WinForms。
一个考虑因素是你想要利用WPF的数据绑定能力。为此,您需要将非托管数据公开为COM类或将数据复制到托管代码中。一种简单的方法是用C ++编写托管包装类来访问非托管数据。另一种简单方法是从托管代码直接访问业务对象层(或数据库)。这取决于您当前数据层的确切内容。
答案 2 :(得分:1)
更好的方法是为您的UI创建一个新的.NET项目(C#是您的朋友),并从那里引用您的C ++ DLLS。您不会轻易在单个项目中混合托管代码和非托管代码。
见How do I call unmanaged C/C++ code from a C# ASP.NET webpage。它专门讨论了一个网页,但winForms或WPF应用程序的代码相同。
答案 3 :(得分:0)
这不值得,而且需要花费大量时间。
可以让非托管C ++代码托管CLR,并让托管代码运行UI。
但是,这绝对不是一项微不足道的任务。
更简单的方法是通过P / Invoke或COM互操作重写非托管代码,并使托管应用程序(使用winforms)调用非托管代码。
答案 4 :(得分:0)
请参阅my answer类似的问题。
您有很多选项可以在MFC中托管托管UI。