我纠结了好久究竟是将wpf界面作为dll供c++工程调用还是将c++做成dll供wpf调用。这个问题我刚开始并没有分清楚。因为我对c++比较熟悉所以就想当然的将c++的工程作为主项目,wpf做的界面供c++这面调用。后来发现这样做后患无穷。理想的一个智能家居项目我觉得应该是这样,一个主程序外加一些设备插件,这样整个项目可扩展性会很强。这样我前面做的项目需要返工。为防止自己偷懒,这次还是边做边记录吧。
托管c++与非托管c++
托管c++可以与c#直接兼容,因此这也是我选择的解决方案。这个解决方案的特点是需要在c++的dll工程中添加托管类。非托管c++编译出的dll不能再c#中直接使用,需要新建类并使用dllimport这样的命令编写接口,在一个大项目中我觉得这样比较麻烦。
C++调用WPF的dll
前面说了我最初是将wpf作为dll供c++这边调用,这样做有一定的弊端,不过里面涉及到的一些方法在其他地方或许可以借鉴到。关于如何配置我就不再赘述。当时主要借鉴了
muzizongheng 的这篇博客。感兴趣可以阅读一下。
WPF调用托管C++的dll
最后我决定对自己的项目做一下大改,清除了原有的版本库,对原工程做了一份拷贝,因为很多代码还可以用。我决定将wpf做的界面作为主项目,c++只是将一些不支持c#的设备的sdk封装成托管c++的dll供主项目调用。这一次其实还是像搬砖一样。我主要借鉴的是
http://joeyliu.blog.51cto.com/3647812/1297961 这篇博客。
小结
托管C++最根本的目的是令一些不兼容C#的设备的SDK能够并入整个项目当中,前面的两篇博客已经介绍的很清楚了,我这里不再赘述。本来这篇博客打算写的挺长的。因为我最初希望使用托管C++的方式来兼容一块视频采集卡的图像采集。那块采集卡只有一个基于win32的SDK。最终功能确实是实现了,但是很臃肿而且不知为何CPU占用非常高。这两天又想起这个问题来在网上找答案,我找到了更为简洁的解决方案。别的设备托管C++实现起来会比较简单,前面两个博客提供的知识已经够了,等以后碰到需要再用托管C++的时候再深入研究吧。接下来的文章将开始介绍整个项目的实现框架。