您的位置:首页 > 编程语言 > C语言/C++

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

2016-08-16 22:16 239 查看
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函数)的调用。

下载代码,请点击此处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  P-Invoke C# C++