动态链接库DLL组件
CLR (公共语言运行库, Common Language Runtime) ,是一个可由多种编程语言使用的运行时环境,基于微软CLI (Common Language Infrastructure, 通用语言框架) 规范实现,是微软的.NET Framework的主要执行引擎。
C++/CLI是一门由微软设计,用来代替C++托管扩展(Managed C++)的语言。其同样基于CLI规范。这门语言在兼容原有的C++标准的同时,对C++的属性和关键字进行扩展,以实现使用标准C++语言在 .NET Framework进行开发。
CLR和C++/CLI的主要优势是提供了使C++和.NET无缝连接的运行平台,使旧代码可以快速地移植到新的平台上。
本验证软件平台界面部分使用.NET 平台的C#语言开发,算法部分使用C语言和C++语言开发,因此使用C++/CLI 作为前端界面和后端算法的中间的连接媒介,将C和C++语言编写的算法代码使用C++/CLI 封装成可用在.NET平台下的CLR组件,供前端界面使用。
开发环境配置
采用VS2017进行开发。使用VS2012版本进行开发组件时,碰到过一些未知错误,所以建议大家最好选择VS2017.
安装完VS2017后,选择【工具】---【获取工具和功能】
如果需要更新,先进行更新,近期更新过的,则不会有该按钮。
然后就进入了Visual Studio Installer对话框之中。
在其中将.Net桌面开发、使用C++的桌面开发和通用Windows平台开发都选中。
在右侧,安装详细信息选项之中,选择使用C++的桌面开发中选择C++/CLI支持
然后点击右下角的修改按钮,等待程序下载完成即可。
进入VS2017,选择文件-新建项目,如果在Visual C++下,出现CLR选项,右侧有三个项目类型,表示C++/CLI开发环境的配置已经成功。
注意下侧,框架处选择【.net framework 4.6.1】,我们课题组的所有组件,都是采用的这个版本的。
1 产生一个组件
二进制级的复用
编写组件的时候最好为每一个组件在外层加一个与之相关的命名空间
编译结束会出现下面这个文件。
配置
2如何用组件
重新新建一个CLR控制台应用程序
会产生下面的一个main函数
添加引用
此时使用组件就和使用本地的代码一样方便。
是二进制级别的复用
C#调用
3虚函数的作用
C++的虚函数主要作用是“运行时多态”,父类中提供虚函数的实现,为子类提供默认的函数实现。
子类可以重写父类的虚函数实现子类的特殊化。
C++中包含纯虚函数的类,被称为是“抽象类”。抽象类不能使用new出对象,只有实现了这个纯虚函数的子类才能new出对象。
C++中的纯虚函数更像是“只提供申明,没有实现”,是对子类的约束,是“接口继承”。
C++中的纯虚函数也是一种“运行时多态”。
如下面的类包含纯虚函数,就是“抽象类”:
普通函数是静态编译的,没有运行时多态,只会根据指针或引用的“字面值”类对象,调用自己的普通函数。
普通函数是父类为子类提供的“强制实现”。
因此,在继承关系中,子类不应该重写父类的普通函数,因为函数的调用至于类对象的字面值有关。
4组件指针
5托管类
内存回收机制
去掉public就会变为私有
托管类可以使用非托管类的代码。
非托管类不可以使用托管类
如果非要使用
如下方式解决
6组件里面的引用
复制本地 就是你的组件变了,那么也会改变。
7Matlab组件
Matlab只能生成函数的组件