1.问题描述
众所周知,不同的语言有不同的优势,如何让不同的语言在一个程序中“各司其职”、“分工协作”一直是一个人们想要达到的目标。有许多时候,我们需要用C#语言调用C++语言写成的代码:一方面,C#在编写GUI时更加方便(因为有WPF),而C++的执行效率之高是实现许多复杂算法的首选语言;另一方面,许多既有代码是通过C++语言编写的(各种库,甚至Win32API),我们也有在C#中重用既有C++代码的需求。本文讨论如何在C#中调用C++代码。
C#代码是基于.NET的托管代码,而C++代码是非托管代码(native code)。微软的.NET提供两种机制实现了托管代码(不只是C#,还包括VB.NET等语言代码)与非托管C++代码的交互:
(1) C#通过PInvoke技术直接调用由C++编写的DLL的导出函数;
(2) 通过COM技术
本文主要讨论方法1中PInvoke技术的应用。
2.使用C++编写动态链接库(DLL)
C#调用C++代码的第一步是把C++代码写成动态链接库(DLL)的形式。动态链接库的概念详见:
动态链接库(编程相关名词)_百度百科