`
lovnet
  • 浏览: 6880958 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

PINVOKE.NET: Do interop the wiki way!

阅读更多

PINVOKE.NET: Do interop the wiki way!


Updated on Friday, October 29, 2004

Writen by Allen Lee

首先什么是PInvoke呢?PInvoke是Platform invoke的缩写。我们先来看看MSDN文档中的解释:

Platform invoke is a service that enables managed code to call unmanaged functions implemented in dynamic link libraries (DLLs), such as those in the Win32 API.

很明显,PInvoke是为了让我们能够调用现有的本机代码,而这些代码是以二进制DLL的形式存在的。微软意识到这种交互的重要性,也深知开发人员不可能丢弃所有已存在的东西直接转向.NET,于是在.NET里面加入了PInvoke这个特性。

那么,什么又是PINVOKE.NET呢?我们来看看官方网站上面的这句话:

Think of this as the 21st century version of VB6's API Text Viewer.

用过VB6的朋友应该对那个API Text Viewer不陌生了吧!在VB6的时代,要调用那些Win32 API函数,就需要用到这个东东。然而在.NET时代却没有一个类似的东西吗?当然,现在你知道这个问题的答案了——PINVOKE.NET。或许,你还发现在它的官方网站上面,我们还可以看到一个很醒目的标语:

Do interop the wiki way!

好吧,赶快下载一个PINVOKE.NET并且安装好,这个步骤的细节我就不啰嗦了。有几点要提醒的,PINVOKE.NET是以插件的形式插入Visual Studio .NET的,所以,前提是,你必须有Visual Studio .NET的其中一个版本,这里用Visual C# .NET来做示范。

首先介绍一下这次的示范项目,它是一个叫做PInvokeLab的ConsoleApplication Project,我们将会调用MessageBox(...)这个API来向用户说声“Hello, PINVOKE.NET!”。现在就让我们来感受一下怎么Do interop the wiki way!

在你需要插入Win32API Signature(有人把它翻译成签名,有人把它翻译成型构,我看我还是用回原文)的地方单击鼠标右键,有没有留意到这个弹出的菜单顶部多了两项?没错,这两项就是PINVOKE.NET插到Visual Studio .NET的东西:“Insert PInvoke Signatures...”和“Contribute PInvoke Signatures and Types...”。

接着选择“Insert PInvoke Signatures...”,得到下面的对话框。

在“What function do you need?”那里写入“MessageBox”,按下右边的[Go]按钮,PINVOKE.NET将会自动连接到www.pinvoke.net的数据库查找数据。

查找完毕就会返回结果。

在这个带有结果的截图上,我们可以看到很多东西。第一,有MessageBox的简要介绍,包括功能以及参数的介绍(英文的)。第二,MessageBox的Signature的最后更新日期。第三,将要插入到你的源代码的代码片断。第四,编程语言的选择,由于这里使用C#,所以它将给出C#样式的Signature。不过笔者特意另外创建一个VB.NET的Project,发现它不能以VB.NET的语法样式插入相应的Signature,不知道它是否偏心C#,希望它在将来的版本有所改进,让更多的开发者受益。第五,左下角那里,给出提供类似或相同功能的Managed API作为使用建议,如果有的话,这里是System.Windows.Forms.MessageBox.Show()。

接着,你检查一下,没问题就按下[Insert]键。

它将提示你代码已经被插入了,现在你可以按[Close]回到原源代码那里,并整理一下代码的缩进等。整理后的代码如下:

usingSystem;
usingSystem.Runtime.InteropServices;

namespacePInvokeLab
{
classTester
{
[STAThread]
staticvoidMain(string[]args)
{
MessageBox(
0,"Hello,PInvoke.NET","PInvokeLab",0);
}


[DllImport(
"user32.dll",CharSet=CharSet.Auto)]
publicstaticexternintMessageBox(inthWnd,Stringtext,Stringcaption,uinttype);

}

}

现在编译该代码并查看一下运行结果:

好吧,说到现在应该怎么做你也应该很清楚的了,还不赶快Do interop the wiki way!?

最后要对PINVOKE.NET补充一下,菜单的另外一项是指你自己对Win32API描述的Signature上传到www.pinvoke.net的数据库。另外,你也可以去官方那里查看相关的Win32API的说明,这些说明大部分都包括Signature、参数信息、示范例子、可选Managed API建议等(英文),当然你也可以去参考其他的文献,例如MSDN Library。有时候你可能发现某些PInvoke的调用失灵,例如ExitWindowsEx(...),不用慌张,你查看该函数的文档的时候会发现调用该函数还需要一些Windows安全措施例如权限制定等,所以,在你调用Win32API之前,首先得确定调用条件,否则程序可能会有莫名其妙的运行效果。还有一点要提醒的,虽然使用PInvoke可以调用Win32API,但这是需要牺牲一些运行时性能的,所以如果有对应的Managed API的话,我建议你还是选用Managed API。

分享到:
评论

相关推荐

    PInvoke.net官方提供的VS API插件

    标题中的“PInvoke.net官方提供的VS API插件”是指一个专为Visual Studio(VS)设计的插件,它由PInvoke.net网站开发并提供。PInvoke.net是一个知名的资源库,致力于收集、整理和分享有关在.NET Framework中进行平台...

    VS PInvoke插件 RedGate.PInvokeExtension VS平台调用插件 PInvoke.NET 最新 最全

    PInvoke插件 RedGate.PInvokeExtension VS平台调用插件 PInvoke 平台调用 ...Access PInvoke.net directly from VS: Terms of Use Edit This Page Find References Show Printable Version Revisions Show changes

    《精通.NET互操作:pinvoke, c++ interop和COM interop》全部源代码

    《精通.NET互操作:pinvoke, c++ interop和COM interop》这本书深入探讨了.NET框架下不同语言和组件之间的交互技术。源代码包含了书中提到的示例,旨在帮助读者更好地理解和应用这些技术。以下是对这些关键技术的...

    RedGate PInvoke Visual Studio 2008 Add-in

    安装源程序,用附件中的PInvokeDotNetAddIn.AddIn覆盖掉安装目录的同名文件,用记事本打开PInvoke.net.reg文件将PInvoke.net的目录修改为你本机的目录路径,保存后双击导入。需要RedGate其他破解的请看这里:...

    在vs2008里使用pinvoke.net插件 .rar

    在Visual Studio 2008(VS2008)中使用PInvoke.NET插件是一个高效的方法,允许开发者调用Windows API和其他非托管代码库,从而扩展.NET Framework的功能。PInvoke(Platform Invoke)是.NET Framework提供的一种机制...

    精通.NET互操作PInvoke,C++ Interop和COM Interop

    本主题将深入探讨PInvoke、C++ Interop和COM Interop这三种主要的.NET互操作方式。 1. **PInvoke(Platform Invoke)** PInvoke是.NET Framework提供的一个特性,用于调用非托管DLL中的函数。它通过在托管代码中...

    PInvoke.net

    可以查询并生成C#格式的API调用, 适用于Visual Studio 2005

    Essential.NET.Volume.1.The.Common.Language.Runtime

    9. **互操作性(Interop)**:CLR支持与非.NET组件(如COM对象)的交互,通过Platform Invoke(PInvoke)和.NET Framework的Interop服务实现。 10. **统一的运行时服务**:CLR提供了许多服务,如线程管理、安全性、本地...

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

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

    PInvoke Interop Assistant.rar

    标题 "PInvoke Interop Assistant.rar" 暗示了这是一个关于C#与C++之间互操作(Interop)的工具包,特别关注P/Invoke技术。P/Invoke是.NET框架提供的一种机制,允许托管代码(C#)调用非托管代码(通常为C或C++编写...

    VS自带API查询器

    .NET developers worldwide can easily contribute to the community, sharing their valuable knowledge, whenever they have time to do so. New to Wikis? Try the Playground to experiment with the editing ...

    SharpScss:围绕libsass的便携式跨平台pinvoke .NET包装器,可将SCSS转换为CSS

    夏普 SharpScss是围绕的P / Invoke .NET包装器,用于将SCSS转换为CSS。 基于libsass 3.6.4的版本产品特点纯P / Invoke .NET包装器,不涉及C ++ / CLI 支持从字符串或文件转换支持包括路径支持源地图支持libsass在...

    PInvoke Interop Assistant

    PInvoke Interop Assistant是一款强大的工具,它为程序员提供了一个便捷的方式,将C/C++的原生代码转换为C#或VB.NET的平台调用(P/Invoke)代码。在.NET框架中,P/Invoke是允许托管代码(如C#或VB.NET)与非托管代码...

    PInvoke Interop Assistant.7z

    Microsoft 推出的 P/Invoke Interop Assistant#C/C++ API 转 C# 工具 找资源不易,限定5个积分

    .netPInvoke逆向调用

    .NET PInvoke逆向调用是.NET Framework提供的一种技术,它允许托管代码(如C#编写的程序)调用非托管代码,通常是操作系统提供的系统API函数。这种技术在处理与硬件交互、利用底层操作系统功能或者使用旧版库时非常...

    公共语言运行库(CLR)开发系列视频课程

    【】39726e13ca4b5de8ba86bb891513915b【】公共语言运行库(CLR)开发系列课程(1):Pinvoke简介【】公共语言运行库(CLR)开发系列课程(2):Pinvoke进阶【】公共语言运行库(CLR)开发系列课程(3):COMInterop基础【】公共...

    NCAPIv2.Net:NCAPIv2 Intel Movidius sdk的C#pinvoke绑定层

    NCAPIv2.Net C#pinvoke绑定层Nuget包在这里: ://www.nuget.org/packages/NCAPIv2.Net

    Audio Compression Manager pInvoke for C#.NET

    Audio Compression Manager pInvoke for C#.NET Function: acmStreamOpen..... Structure: WAVEFORMATEX....

    RedGate .NET Developer Bundle 09-06-17.part1

    内含 ANTS Memory Profiler 5.0.0.886 ANTS Performance Profiler 5.0.0.207 PInvoke.Net 破解:http://download.csdn.net/source/1438956

    RedGate .NET Developer Bundle 09-06-17.part2

    内含 ANTS Memory Profiler 5.0.0.886 ANTS Performance Profiler 5.0.0.207 PInvoke.Net 破解:http://download.csdn.net/source/1438956

Global site tag (gtag.js) - Google Analytics