2008-10-07 66 views
1

基本上我有一群非托管VC++静态库。而使用它的VC++ GUI应用程序则基于MFC。 目标是用C#中完成的应用替代GUI应用,而使用所有相同的静态库。 问题是,如果这甚至是可能的,如果是的话,那么什么是正确的方式来实现呢?非托管vC++静态库和C#GUI应用程序

建议,任何人? 谢谢。

回答

1

Rob是正确的 - 您可以完全在C++/CLI中完成,但我们发现将一些本机类包装到托管的WinForms用户控件类中非常有用。此托管类包含本机类的一个实例,不仅在方法调用中编组数据(如字符串),而且还将本机回调(用boost :: signal实现)转换为.NET事件。此信号事件转换的整个解决方案在this question中详细说明。 .NET WinForms用户控件还捕获本地异常并将它们重新抛出为托管异常,并且还将非.NET接口(返回迭代器的方法)翻译为更多.NET风格的接口,您可以在其中阅读this question。然后,我们可以直接在WPF应用程序中使用.NET类。请注意,如果您将它封装为.NET类,它将不得不从DLL中使用C#。

2

是的,可以使用C++/CLI来管理C++代码。您可以编写一个C++/CLI WinForms应用程序,并按照正常情况链接到静态库中。

但是,如果在GUI代码和库之间有很多紧密的耦合,那么这可能会有点混乱。您将需要担心在托管和非托管世界之间转换某些数据类型,特别是字符串。如果您需要通过管理对象/阵列

有关于Wikipedia和许多关于MSDN的文档很好的介绍。

+0

诀窍还在于GUI应用程序必须从这些静态库中扩展一些对象,才能对从库调用的某些回调方法作出反应。这会工作吗? – Ma99uS 2008-10-07 14:32:50

相关问题