当前位置: 首页 > article >正文

C#如何快速获取P/Invoke方法签名

使用API函数已经好几年了,封装函数签名基本是参照MSDN上的文档,然后再做数据类型对应。

虽然有 pinvoke.net 这个网站,但基本很少使用。一方面是想多动手,另一方面是因为各种数据类型基本都用过了,都能自己在C#中 对应 起来。

最近在逛github时,发现了一个官方的项目,GitHub - dotnet/pinvoke: A library containing all P/Invoke code so you don't have to import it every time. Maintained and updated to support the latest Windows OS.,这个项目是流行操作系统的所有P/Invoke方法签名的库集合。

LibraryPackage nameDescription
advapi32.dllPInvoke.AdvApi32Windows Advanced Services
bcrypt.dllPInvoke.BCryptWindows Cryptography API: Next Generation
cabinet.dllPInvoke.CabinetCabinet API Functions
cfgmgr32.dllPInvoke.CfgMgr32Device and Driver Installation
crypt32.dllPInvoke.Crypt32Windows Cryptography API
DwmApi.dllPInvoke.DwmApiDesktop Window Manager
fusion.dllPInvoke.Fusion.NET Framework Fusion
gdi32.dllPInvoke.Gdi32Windows Graphics Device Interface
hid.dllPInvoke.HidWindows Human Interface Devices
iphlpapi.dllPInvoke.IPHlpApiIP Helper
kernel32.dllPInvoke.Kernel32Windows Kernel API
magnification.dllPInvoke.MagnificationWindows Magnification API
mscoree.dllPInvoke.MSCorEE.NET Framework CLR host
msi.dllPInvoke.MsiMicrosoft Installer
ncrypt.dllPInvoke.NCryptWindows Cryptography API: Next Generation
netapi32.dllPInvoke.NetApi32Network Management
newdev.dllPInvoke.NewDevDevice and Driver Installation
ntdll.dllPInvoke.NTDllWindows NTDll
psapi.dllPInvoke.PsapiWindows Process Status API
setupapi.dllPInvoke.SetupApiWindows setup API
SHCore.dllPInvoke.SHCoreWindows Shell
shell32.dllPInvoke.Shell32Windows Shell
user32.dllPInvoke.User32Windows User Interface
userenv.dllPInvoke.UserenvWindows User Environment
uxtheme.dllPInvoke.UxThemeWindows Visual Styles
winusb.dllPInvoke.WinUsbUSB Driver
WtsApi32.dllPInvoke.WtsApi32Windows Remote Desktop Services

例如要使用User32中的ShowWindow函数

1、导入Nuget包(PInvoke.User32)

2、使用

写在最后

有了这个项目,以后调用API函数可以更方便。最重要的是,官方提供了函数签名示例,我们可以从里面学到很多东西。

2024.11.06更新

pinvoke项目已经废弃,使用CsWin32项目替代,使用方法跟上述基本一致。

CsWin32项目将不同的dll导出函数都放到一个包中,不需要再去使用对应dll的包。

nuget搜索CsWin32包使用即可。


http://www.kler.cn/a/383796.html

相关文章:

  • 带你用Go实现二维码小游戏(下)
  • 还在担心Mac卸载不干净?XApp帮你干净完成卸载
  • 【原创】java+ssm+mysql收纳培训网系统设计与实现
  • C++之queue容器
  • git 提交代码流程
  • 无root权限在Linux虚拟环境安装指定版本python
  • 【ChatGPT】让ChatGPT生成跨语言翻译的精确提示
  • iOS灵动岛动画小组件怎么播放动画
  • Python实例:爱心代码
  • PySpark本地开发环境搭建
  • 【Pytorch】基本语法
  • ssm052游戏攻略网站的设计与实现+vue(论文+源码)-kaic
  • Hyperledger Fabric 入门笔记(十六)Fabric V2.5 测试网络部署补充 - 手动从通道中移除组织
  • 使用C++和libcurl库实现HTTP请求(GET、POST、文件上传)
  • 微信小程序,点击bindtap事件后,没有跳转到详情页,有可能是app.json中没有正确配置页面路径
  • lua入门教程:数字
  • 后端:Spring、Spring Boot-配置、定义bean
  • 法语je vais bien
  • 6 张图带你深入了解 kube-scheduler
  • Minimalist GNU for Windows
  • WPS单元格重复值提示设置
  • 【NLP】使用 SpaCy、ollama 创建用于命名实体识别的合成数据集
  • OPC通信
  • 数据库操作(php+mysql)
  • React中常用的hook函数(二)——useMemo和useCallback
  • C++ 并发专题 - 条件变量的使用