基本上我有一堆非托管VC ++静态库。而VC ++ GUI应用程序使用它们并且它基于MFC。 目标是使用在C#中完成的GUI应用程序替换GUI应用程序,但使用所有相同的静态库。 问题是,如果这是可能的,如果是的话,那么实现这一目标的正确方法是什么?
建议,有人吗? 谢谢。
答案 0 :(得分:2)
是的,可以使用C ++ / CLI进行托管C ++代码。您可以编写C ++ / CLI WinForms应用程序,并按照正常情况直接链接到静态库中。
但是,如果GUI代码和库之间存在很多紧密耦合,那么这可能会有点混乱。您需要担心在托管和非托管环境之间转换某些数据类型,尤其是字符串。如果需要传递托管对象/数组
答案 1 :(得分:1)
Rob是正确的 - 您可以完全在C ++ / CLI中完成,但我们发现在托管的WinForms用户控件类中包装一些本机类最有用。此托管类包含本机类的实例,不仅包括方法调用中的字符串等编组数据,还包括将本机回调(使用boost :: signal实现)转换为.NET事件。这个信号事件转换的整个解决方案在this question中详细说明。 .NET WinForms用户控件还捕获本机异常并将它们作为托管异常重新抛出,并且还将非.NET接口(返回迭代器的方法)转换为更加.NET样式的接口,您可以在其中阅读this question。然后我们可以直接在WPF应用程序中使用.NET类。请注意,如果将其包装为.NET类,则必须使用从C#中使用的DLL。