P/Invoke 技术

.NET 互操作

  首先推荐一本书《精通.NET 互操作》 ,这本书是目前中文资料里讲 互操作最详尽的书了。

  做系统集成项目的同学应该都和设备打过交道(如视频设备:海康、大华等),在大多数情况下这些设备厂商会给系统集成厂商开发协议(dll 类库、 函数定义的头文件、测试程序、调用流程),这些协议的dll 大都用C++开发的,那么我们用C#集成,就得用 P/Invoke 技术(.NET 互操作的一种)

一、P/Invoke 简单例子

  P/Invoke 说白了,就是你调用协议dll 的函数,传入正确的参数(注意C++与C#的数据类型转换)

  例子:

复制代码
 1 using System.Runtime.InteropServices;
 2 
 3 class App
 4 {
 5     [DllImport("msvcrt.dll")]
 6     static extern int puts(string msg);
 7     
 8     [DllImport("msvcrt.dll")]
 9     static extern int _flushall();
10     
11     static void Main()
12     {
13         puts("Hello World");
14         _flushall();
15         CreateMsgWindow();
16     }
17     
18     
19     [DllImport("user32.dll",EntryPoint="MessageBox")]
20     static extern int MessageBox(int hwnd,string lpText,string lpCaption,int wType);
21         
22     static void CreateMsgWindow()
23     {
24         MessageBox(0,"Hello world!","Welcome",0);
25     }
26 }
复制代码

二、两款 dll 函数查看工具

1. Dll Export Viewer

2. Dll 函数查看器 2.0

三、C#与C++常见类型对比

C++ 类型 C# 类型
HANDLE (void *)括号内是等价类型 IntPtr
Byte(unsigned char) byte
SHORT(short) short
WORD(unsigned short) short
INT(int) int
int* ref int
UINT(unsigned int) int
LONG(long) int
ULONG(unsigned long)  uint
DWORD(unsigned long) uint
BOOL(long) bool
PCAHR(char *) string
char[] string
PBYTE(byte *) byte[]
结构体 publlic struct 结构体{}
char **变量名 ref string 变量名

结构体封装

 View Code

附:

1. 精通.NET 互操作 pdf 和 iso 下载

2. Dll Export Viewer 下载

3. Dll 函数查看器 2.0 下载

原文地址:https://www.cnblogs.com/Leo_wl/p/11168217.html