65.9K
CodeProject 正在变化。 阅读更多。
Home

P/Invoke 库 - VS2005 & 2008 Add-in

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.60/5 (9投票s)

2008年2月20日

CPOL

3分钟阅读

viewsIcon

94609

downloadIcon

1892

本文描述了 P/Invoke 库 Visual Studio add-in。

PInvokeLib Module

PInvokeLib Define

引言

本文介绍了 PInvokeLib Visual Studio Add-in。此工具将帮助您组织在应用程序中经常使用的 P/Invoke 签名。希望您不会觉得此工具过时,因为它提供了其他工具中没有的几个功能。

背景

我经常访问的一个网站是 pInvoke.net。这是一个非常棒的网站,具有 Web 服务后端。同样,它提供了一个 Visual Studio add-in,用于与他们的服务通信,并允许您在程序中插入 P/Invoke 签名。我相信这个网站将继续为 .NET 社区服务多年。 PInvokeLib 旨在通过允许您组织自己的库来补充此类工具。 事实上,您可以几乎可以从 MSDN 或您自己的头文件中剪切和粘贴函数。 只需要进行一些小的修改。 PInvokeLib 支持以下编程语言:C#、VB .NET 和 MC++。

入门

PInvokeLib Manager 有两个选项卡。“模块”选项卡是您可以插入 P/Invoke 签名的地方。目前,只能添加函数和结构。使用“定义”选项卡来定义您的函数和结构。您可以添加、更新、删除和搜索定义。搜索仅限于选定的模块。搜索也可以使用通配符 (*)。

插入 API 函数

  • 选择或添加模块名称
  • 键入函数名称
  • 键入或粘贴函数原型(只需删除多余的分号 (;))
  • 单击“更新”按钮以添加您的库

    注意:大多数 C 类型已经定义,并且可以按原样重用。不支持字符字符串以外的 C 指针。

PInvokeLib 将把任何未知类型转换为大写,使其更易于查找。我相信这会让您更轻松,以防您以后需要定义自己的结构。

插入结构

  • 选择或添加模块名称
  • 键入结构名称
  • 键入或粘贴结构定义

高级功能

函数参数方向支持 P/Invoke 签名可以指定为具有按值(默认)、按引用或仅输出传递的函数参数。这仅适用于函数原型。

PInvokeLib 支持参数的以下扩展

  • [In] - 这指定输入参数是按值传递的(如果没有则默认为此)。
  • [Out] - 这指定使用了输出参数。
  • [In,Out] - 这指定了输入/输出参数。

例如,让我们导入 ShlwApi.dllLPWSTR PathAddBackslashW( LPWSTR lpszPath)。为此,正确的定义将是:LPWSTR PathAddBackslashW( [In,Out] LPWSTR lpszPath),因为字符串参数是按引用传递的。 PInvokeLib 建议

[DllImport("ShlwAPI.dll")]
public static extern String PathAddBackslashW([In,Out]String lpszPath)

但是,要获得正确的结果,输入参数应该是一个 StringBuilder。以下是使用此函数的完整示例代码

using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;

namespace PInvokeLib
{
    class PInvoke
    {
        [DllImport("ShlwAPI.dll")]
        public static extern String PathAddBackslashW([In,Out]StringBuilder lpszPath);

        public static void Main(string[] args)
        {
           StringBuilder sb = new StringBuilder(@"c:\temp\temp", 200);
           PathAddBackslashW(sb);
           Console.WriteLine("Path with extra slash:"+ sb);
        }
    }
}

安装

PInvokeLib add-in 完全受 Visual Studio 2005 和 2008 支持。将 PInvokeAddin_Bin.zip 中的所有文件提取到

  • Visual Studio 2005: <drive:>\Documents and Settings\<username>\My Documents\Visual Studio 2005\Addins
  • Visual Studio 2008: <drive:>\Documents and Settings\<username>\My Documents\Visual Studio 2008\Addins

然后,确保您从“Add-in 管理器”(工具->Add-in 管理器...)启用该 add-in。从上下文菜单(在文本编辑器中右键单击)启动该 add-in。

Running PInvokeLib Add-in

历史

最后更新 [08/02/26]

此更新将接受 #defines(整数)。 您几乎可以复制并粘贴完整的头文件。 请参阅 TestFile.h 了解所有支持的功能。 您可以使用 C 或 C++ 风格的注释来删除导致问题的行。 您可以使用正确的签名 __cdecl__stdcall 来导入您的函数。

SpecImporter 类库可用 - 一个基于 CocoR 的解析器类。 欢迎在您自己的程序中重用此库。

一如既往,请享用!

© . All rights reserved.