.NET 互操作

匿名 (未验证) 提交于 2019-12-02 23:47:01

.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 下载

  首先推荐一本书《精通.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 下载

转载请标明出处:.NET 互操作
文章来源: .NET 互操作
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!