1.编写DLL库WrapCeres
1.1.编写要导出的代码
1.2.编译链接配置
1.3.编译
2.用C#调用DLL库WrapCeres
2.1.C#与C/C++之间类型的对应关系
2.2.Dllimport详解
2.3.深入讨论C#调用C++的方法
2.4.在WPF中实际调用WrapCeres.dll
(二)调用Ceres库
上面我们其实已经运行过Ceres里面自带的一些例程了,比如helloworld、helloworld_static等。大家感兴趣的话,可以去深入学习一下这些官方例程,我这里就不多说了。
值得注意的是,这些Ceres官方例程都是应用程序项目,就是这些例程编译出来的exe文件是可以直接运行的。如果大家想要直接编写简单的C++应用程序来调用Ceres库实现一些简单的功能,可以借鉴这些官方例程依葫芦画瓢写自己的程序。然而通常情况,我们是在一个非常复杂的Windows桌面应用程序中来调用Ceres库实现某个数学计算任务。Windows桌面应用一般是基于.NET的C#程序,比如WPF桌面应用。我们知道一个C++应用程序可以直接调用其他C++库(lib静态库和dll动态库都可以),而C#应用程序只能通过导出方式调用C++的dll动态库。当C#应用程序要调用很多个不同的C++库,而且这些C++库中既有动态库又有静态库时就比较麻烦了。一般是将我们要使用的这些C++库集成到一个专门的C++ DLL中,如果条件允许的话最好采用静态链接方式将这些C++库集成到这个专门的C++ DLL中。下面就以Ceres库调用为例来介绍如何编写这个专门的C++ DLL,以及如何在C#中调用这个专门的C++ DLL。
1.编写DLL库WrapCeres
方便起见,我是直接在上面的ceres-windows解决方案下面新建了一个C++ DLL空项目,取名叫WrapCeres。