最近做一个项目,底层是由C++库,应用层要用.Net实现。因此需要将C++库做个Wrapper,映射成托管程序集。我们可以用C++/CLI或者C#直接用Dllimport来引入。我选择的是用C++/CLI写Wrapper库,但是发现API中有几百个Struct定义和非常多的宏,常量定义,手工转的话是一项机械式的劳动,而且非常容易丢变量、数据类型映射错误等。
为解决上述问题并能快速生成映射库,首先想到的是写个程序自动分析一下做映射,但是头文件引用,宏定义,嵌套的typedef 语句等分析起来还是比较复杂,赶上开发一个简单的C++语法分析器了。后来想到VS的宏,我想VS里面应该有所有类型的信息,否则代码提示等功能将无法实现,如果能用宏来访问VS中的项目内类型信息那么转换将是非常容易的事情了,查了半天MSDN发现很多好东西,写出来给大家分享一下:).
我们知道微软很多产品都有宏功能,word、excel等,在excel中我们可以用宏写一些程序,完成我们重复性的数据处理工作,同样我们在VS中也可以用宏来生成一些重复性的代码,下面我一步步介绍如何用宏来生成C++/CLI Wrapper 类.
- 首先我们打开我们的API Demo程序或者新建一个Win32 C++应用程序(这一点是必须的,否则无法找到C++类型信息)。
- 在你的应用程序中引用API的头文件,写一些简短的调用方法,编译你的应用程序。
- 点击工具Tools->Macros->Macros IDE..菜单,打开宏编辑工具。
- 在Project Explorer中点右键,在弹出菜单中点击Add New --> Add Module菜单项,在弹出菜单中输入CPlusWrapper点击Add按钮,会出现以下代码:
- 我们在Module/End Module之间添加自己宏代码执行函数。