C#调用C++ dll全解析, 基本数据

1 篇文章 0 订阅
1 篇文章 0 订阅

C#是托管语言(Managed language),运行在CLR下。C++是非托管语言(UnManaged language)。托管语言和非托管语言的区别在于托管语言本身做了许多服务,封装很多操作,比如内存自动回收,运行库类型检查,安全类型等。Win32程序使用C++语言,Windows Sdk提供的功能都是封装在c++ dll文件中,比如最最重要的三大功能的dll(kernel32.dll、user32.dll、gdi32.dll)。在我们开发win32程序操作数据的输入输出、窗口消息和GUI的时候会经常使用这三个dll的导出接口。C#对于常用库函数的处理是非常到位的,但是项目需求时而不时会用到Win32相应的功能,不可避免需要调用C++ dll导出接口。不管是系统的导出接口,其他程序的导出接口。


*那么怎么调用呢?*

方案1、封装com,提供给c#程序调用,无奈这种写的复杂使用简单的方案越来越不被人们使用;
方案2、使用P/Invoke,一套完整InterOP方案完成托管语言与非托管语言的交互;

这里使用方案2

系列:

C#调用C++ dll全解析,基本数据类型
C#调用C++ dll全解析,指针
C#调用C++ dll全解析,结构体
C#调用C++ dll全解析,函数指针
C#调用C++ dll全解析,回调函数和复杂数据类型
C#调用C++ dll全解析,非安全代码

基本类型的调用:

一、新建win32 dll工程pinvoke_dll.dll,提供add函数作为导出接口

1、win32 dll工程 声明:

extern "C"
{
    __declspec(dllexport) __int32 add(__int32 a, __int32 b);
}

2、win32 dll工程 实现:

__declspec(dllexport) __int32 add(__int32 a, __int32 b)
{
    return a+b;
}

3、win32 dll工程 def文件:

LIBRARY pinvoke_dll

EXPORTS
add

二、新建C#工程pinvoke_CSharpe,调用上面输出的C++ dll工程(pinvoke_dll.dll)接口

1、声明dll的导出函数

public class pinvoke_dll
{
    [DllImport("pinvoke_dll")]
    public extern static UInt32 add(UInt32 a, UInt32 b);
} 

2、调用add函数,完成调用

UInt32 res = pinvoke_dll.add(1,2);

以上完成C#程序对C++ dll导出接口(add函数)的调用。
下载代码,请点击此处

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值