使用平台调用(PInvoke)实现C#调用非托管C++代码

本文详细介绍了如何在C#中通过平台调用(PInvoke)技术来调用非托管C++编写的动态链接库(DLL)。首先在C++中创建DLL,导出函数,然后在C#中通过特性DllImport进行方法封装,实现对DLL函数的调用。同时,文章探讨了参数传递和类型兼容性问题,包括如何传递数组。
摘要由CSDN通过智能技术生成

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)的形式。动态链接库的概念详见:

动态链接库(编程相关名词)_百度百科

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值