`

P/Invoke DllImport[] 托管代码访问非托管dll的函数

阅读更多

 

平台调用技术(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 助手

    P/Invoke Interop Assistant,它支持托管代码和非托管代码之间的方法签名的转换,而且直接生成相关的C#或者是VB的方法调用代码。这个签名的转换,不只是适用于Windows的方法签名,只要给定一个C头文件,就可以转换...

    精通.NET互操作 P/Invoke,C++Interop和COM Interop 【带书签目录】

    《精通.NET互操作P/Invoke,C++Interop和COM Interop》介绍Windows平台上的托管代码与非托管代码之间进行互操作的各种技术,包括由.NET提供的各种互操作方法、属性以及各种工具的用法及其工作原理。《精通.NET互操作...

    P/Invoke Interop Assistant交互助手

    可以把C/C++中的数据类型、结构体数据格式转换为C#或者VB版本中的对应格式类型。很方便

    《CLR via C#》非托管代码互操作性提到的P/Invoke Interop Assistant

    《CLR via C#》非托管代码互操作性提到的P/Invoke Interop Assistant开发工具,包含源代码,是从网站:http://clrinterop.codeplex.com/ 上下载的,作为备份

    P/Invoke Interop Assistant

    P/Invoke Interop Assistant,用来调试C++写的动态库转换成C#或VB.NET

    《精通.NET互操作:p/invoke, c++ interop和COM interop》源代码

    《精通.NET互操作:p/invoke, c++ interop和COM interop》一书的源代码

    P/Invoke获取CultureInfo

    利用P/Invoke获取更改后的系统CultureInfo

    使用P/Invoke来开发用于与串行设备通讯的.NET基类

    这篇文章介绍了用C#安全代码编写一个多线程的,且时尚的与RS232通讯的基础类库。这个类库使用平台调用服务(即Platform Invocation Services)来与Win32 API直接交互。程序员可以通过继承在任何.NET语言下使用这个...

    C#串口操作小例子,P/Invoke

    C#串口操作小例子,P/Invoke 调用...........

    p/Invoke.net工具

    托管代码与非托管代码互操作的辅助产生代码的工具

    《精通.NET互操作:P/Invoke,C++ Interop和COM Interop》第四部分

    《精通.NET互操作:P/Invoke,C++ Interop和COM Interop》 因为此书太大,所以分为7部分下载;每部分可单独使用,为RAR压缩文件解压后为PDF版。因为第二部分和第六部分太大以后有权限了上传。 共分为:七部分 当前是:...

    精通.Net互操作配套源码光盘、工具

    《精通.NET互操作P/Invoke,C++Interop和COM Interop... (展开全部) 《精通.NET互操作P/Invoke,C++Interop和COM Interop》介绍Windows平台上的托管代码与非托管代码之间进行互操作的各种技术,包括由.NET提供的各种互...

    J/Invoke 2010 jinvoke jni 天涯浪子

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

    Invoke-WCMDump结合powershell进行密码获取

    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(P/Invoke)

    为了能用上原来的C++代码,只好研究下从C# 中调用DLL  首先必须要有一个声明,使用的是DllImport关键字:  包含DllImport所在的名字空间  using System.Runtime.InteropServices;  public class XXXX{  ...

    C#/ Win32 P /调用源生成器-.NET开发

    源生成器,用于将用户定义的Win32 P / Invoke方法集和支持类型添加到C#项目中。 C#/ Win32 P / Invoke源生成器一个源生成器,用于将用户定义的Win32 P / Invoke方法集和支持类型添加到C#项目中。 功能快速向您的...

    JNI介绍及开发i教程.rar

    JNA使Java调用原生函数就像.NET上的P/Invoke一样方便、快捷。 JNA的功能和P/Invoke类似,但编写方法与P/Invoke截然不同。JNA没有使用Annotation, 而是通过编写一般的Java代码来实现。 P/Invoke是.NET平台的机制。而...

    精通.NET互操作

    精通.NET互操作P/Invoke,C++Interop和COM Interop》介绍Windows平台上的托管代码与非托管代码之间进行互操作的各种技术,包括由.NET提供的各种互操作方法、属性以及各种工具的用法及其工作原理。《精通.NET互操作P/...

Global site tag (gtag.js) - Google Analytics