平台调用技术(P/Invoke): 主要用于处理在托管代码中调用C/C++库函数及Win32(windows32位系统)的 API函数等非托管函数的情形
受控代码与非受控代码进行交互时会产生一个事务(transition) ,这通常发生在使用平台调用服务(Platform Invocation Services),即P/Invoke
平台调用是一种服务,它使托管代码能够调用 DLL 中实现的非托管函数
如调用系统的 API 或与 COM 对象打交道,通过 System.Runtime.InteropServices 命名空间
为了从托管代码中调用非托管的DLL中函数,你要创建一个P/Invoke包装(Wrapper)。一个P/Invoke包装是一个.net兼 容的方法声明,用来创建P/Invoke包装的语法与创建托管方法的声明语法本质上是一样的。唯一不同是P/Invoke包装不包含函数体,而只有方法 名、返回值类型和参数信息。并且,P/Invoke包装使用了DllImport属性。这个属性是用来定位包含有目标函数的非托管的DLL。
例如:
MessageBox在win32的头文件中的声明:
int WINAPI MessageBoxA(HWnd,LPCWSTR lpText,LPCWSTR lpCaption,UINT uType);
那么我们要在C#中调用这个MessageBox时要这样声明:
using System.Runtime.InteropServices;
public class Win32 {
[DllImport("user32.dll")]
public static extern int MessageBox(int hWnd, String text,
String caption, uint type);
}
然后可以用常规的.net方法去调用这个MessageBox:
public class HelloWorld {
public static void Main() {
Win32.MessageBox(0, "Hello World", "Platform Invoke Sample", 0);
}
}
相关推荐
P/Invoke Interop Assistant,它支持托管代码和非托管代码之间的方法签名的转换,而且直接生成相关的C#或者是VB的方法调用代码。这个签名的转换,不只是适用于Windows的方法签名,只要给定一个C头文件,就可以转换...
《精通.NET互操作P/Invoke,C++Interop和COM Interop》介绍Windows平台上的托管代码与非托管代码之间进行互操作的各种技术,包括由.NET提供的各种互操作方法、属性以及各种工具的用法及其工作原理。《精通.NET互操作...
可以把C/C++中的数据类型、结构体数据格式转换为C#或者VB版本中的对应格式类型。很方便
《CLR via C#》非托管代码互操作性提到的P/Invoke Interop Assistant开发工具,包含源代码,是从网站:http://clrinterop.codeplex.com/ 上下载的,作为备份
P/Invoke Interop Assistant,用来调试C++写的动态库转换成C#或VB.NET
《精通.NET互操作:p/invoke, c++ interop和COM interop》一书的源代码
利用P/Invoke获取更改后的系统CultureInfo
这篇文章介绍了用C#安全代码编写一个多线程的,且时尚的与RS232通讯的基础类库。这个类库使用平台调用服务(即Platform Invocation Services)来与Win32 API直接交互。程序员可以通过继承在任何.NET语言下使用这个...
C#串口操作小例子,P/Invoke 调用...........
托管代码与非托管代码互操作的辅助产生代码的工具
《精通.NET互操作:P/Invoke,C++ Interop和COM Interop》 因为此书太大,所以分为7部分下载;每部分可单独使用,为RAR压缩文件解压后为PDF版。因为第二部分和第六部分太大以后有权限了上传。 共分为:七部分 当前是:...
《精通.NET互操作P/Invoke,C++Interop和COM Interop... (展开全部) 《精通.NET互操作P/Invoke,C++Interop和COM Interop》介绍Windows平台上的托管代码与非托管代码之间进行互操作的各种技术,包括由.NET提供的各种互...
J/Invoke enables Java developers to easily invoke native methods (such as the Win32 API or C-based Windows DLLs and Unix dynamic libraries) with pure Java code. Unlike error-prone JNI programming ...
Ivoke-WCMDump 什么是Credential Manager ...从Credential Manager导出Windows凭据的Powershell脚本 https://github.com/peewpw/Invoke-WCMDump PS>Import-Module .\Invoke-WCMDump.ps1 ...Invoke-WCMDump
为了能用上原来的C++代码,只好研究下从C# 中调用DLL 首先必须要有一个声明,使用的是DllImport关键字: 包含DllImport所在的名字空间 using System.Runtime.InteropServices; public class XXXX{ ...
源生成器,用于将用户定义的Win32 P / Invoke方法集和支持类型添加到C#项目中。 C#/ Win32 P / Invoke源生成器一个源生成器,用于将用户定义的Win32 P / Invoke方法集和支持类型添加到C#项目中。 功能快速向您的...
JNA使Java调用原生函数就像.NET上的P/Invoke一样方便、快捷。 JNA的功能和P/Invoke类似,但编写方法与P/Invoke截然不同。JNA没有使用Annotation, 而是通过编写一般的Java代码来实现。 P/Invoke是.NET平台的机制。而...
精通.NET互操作P/Invoke,C++Interop和COM Interop》介绍Windows平台上的托管代码与非托管代码之间进行互操作的各种技术,包括由.NET提供的各种互操作方法、属性以及各种工具的用法及其工作原理。《精通.NET互操作P/...