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

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.lryc.cn/news/477712.html

相关文章:

  • CqEngine添加联合索引和复合唯一索引
  • 基于matlab的SVPWM逆变器死区补偿算法仿真研究
  • 【网页设计】CSS 定位
  • scala的属性访问权限
  • QGIS:HCMGIS插件
  • Melty 主体流程图
  • 【图像与点云融合教程(五)】海康相机 ROS2 多机分布式实时通信功能包
  • 正则截取字符窜数字,字母,符号部分
  • 【ChatGPT】让ChatGPT生成跨语言翻译的精确提示
  • Vue3父传子
  • 使用VBA宏合并多个Excel文件的Sheet页
  • Anolis8防火墙安全设置
  • 标题:自动化运维:现代IT运维的革新力量
  • 无人机之姿态融合算法篇
  • Redis系列---数据管理
  • 【Linux系统编程】第四十二弹---多线程编程全攻略:涵盖线程创建、异常处理、用途、进程对比及线程控制
  • Rust 力扣 - 2379. 得到 K 个黑块的最少涂色次数
  • “单元测试”应该怎么写比较好
  • 腾讯开源首个文图生3D大模型Hunyuan3D-1.0
  • c语言简单编程练习10
  • 时序预测 | Matlab基于TSA-LSTM-Attention被囊群优化算法优化长短期记忆网络融合注意力机制多变量多步时间序列预测
  • 数据结构[2016]
  • DBAPI连接阿里云 maxcompute 报错
  • Web3对社交媒体的影响:重新定义用户互动方式
  • 【LeetCode】【算法】322. 零钱兑换
  • 人工智能技术:未来生活的“魔法师”
  • docker加载目录中所有的镜像
  • 使用免费的飞书机器人,实现消息推送实时通知
  • 各种网络设备的工作原理
  • FilterListener组件