目前,我们正在开发一个C ++遗留代码库,它由几个软件组件组成。
其中一个组件是以极难维护的方式编写的。 (例如,内存分配在X位置完成,但内存取消分配在Y位置完成。这使内存管理成为一项痛苦的工作)。到目前为止,我们能够解决(或解决)所有内存泄漏问题。
然而,经过几轮错误修复后,我们的感觉是,由于该软件组件的高维护成本,我们无法远离目前的里程碑。
我知道重写源代码可能不好:http://www.joelonsoftware.com/articles/fog0000000069.html
然而,我们预计不会重新考虑当前代码,而是因为
而从头开始重新编写代码会更好因此,我们计划采用托管代码,至少使内存管理成为一项无痛的工作。我们计划选择C#,作为
我来自C ++和Java背景,对C#一无所知。
感谢。
答案 0 :(得分:1)
我处于类似的情况,我也做了一些混合C ++和C#的实验。然而,我的申请中的问题是:
此外,您无法直接从本机/非托管C ++调用C#,这意味着我必须引入一个额外的中间C ++ / CLI(或称为C ++ .Net?)层。
因此,我选择不转向C#,而是继续使用C ++。
因此,如果您想从C ++迁移到C#,请确保:
此外,请记住,如果您不是该项目的唯一开发人员,那么所有(或大多数)开发人员也应该学习C#。您不希望将所有C#代码委托给最新的初级开发人员,因为如果他离开,您将(或可能)遇到麻烦。
答案 1 :(得分:0)
C#与MFC DLL的接口有多好,有些DLL函数会调用MFC GUI吗?
一点也不好。你不能P / Invoke到C ++库 - 它只适用于C导出。您需要编写一个包装器,将C库接口公开给您从C#进行P / Invoke,或者您需要使用C ++ / CLI重新编译MFC。没有什么理由这样做,因为Winforms是一个类似于MFC for .NET代码的库。
我需要注意什么?
我不明白这个问题。
如果我们使用托管C ++,那么与传统C ++ DLL的接口是否会更容易?
考虑到你不能使用C#,是的。您必须重新编译这些C ++ DLL以使它们公开C接口,或者您必须使用C ++ / CLI从源代码重新编译它们。
注意:无论你在这里做什么,你仍然要担心内存管理和本机代码中发生的任何事情的对象生命周期。 CLI不会自动为您管理本机资源。