混合语言编程:启用CLR(公共语言运行时编译)让C#调用C++
前言
关于混合C#和C++的编程方式,本人之前写过一篇博客(参见混合语言编程:C#使用原生的Directx和OpenGL),在之前的博客中,介绍了在C#的Winform和WPF下使用原生的Direct和OpenGL进行绘图,主要使用的方式是声明一个函数为导出函数,然后就可以在C#中使用这个函数。
存在的问题
之前的方式使C#调用C/C++成为可能,但是存在很多缺点,主要表现在以下几个方面:
- 使用
extern "C" _declspec(dllexport)
的声明方式只能定义C函数,无法直接使用C++的类,功能不够强大。 - 参数传递很麻烦,尤其是传入数组时,经常会出现参数类型错误或者数组长度不正确,很不灵活。
- 需要写重复性的代码,在C#代码中需要重复声明C/C++写的DLL中的函数,如果在C/C++代码中定义了结构体,还需要在C#中重复声明,处理参数类型又是一个麻烦的事情。
- 需要手动拷贝DLL到C#程序的目录下,如果忘记拷贝了,程序在运行时会报DLL未找到的错误。
- 非常不利于调试