这是一个致力于将所有平台 API 编写进 .NET 的库.
它使用了 C# 语言的命名与特性, 使得平台 API 的调用变得更加简单.
目前还在 Win32 中苦苦挣扎 o(≧口≦)o
用来定义公共的特性与其他相关内容
包含 Windows 平台中的 WinAPI 函数定义, 常量, 结构体定义.
本库编写于 WINVER
为 0x0A00 的环境中, 某些结构体的字段可能在旧系统中无法工作. 例如 DEVMODE
中 DM_SPECVERTION
, 在不同系统版本中的取值也不一样
字段声明是按照 64 位操作系统来的, 不过 Windows 中 LPARAM 和 WPARAM 大小都一样, 所以不会有问题
注: 下列所有编写规范的前提是: 不能违反 .NET 代码编写规范与命名方式
- [特性] 所有参数必须有正确的
In
,Out
,Optional
特性 - [特性] 自定义类型诸如
HDWP
这类本质是指针或句柄, 且需要说明的特殊类型, 必须使用NativeType
特性来标记它在 C++ 中的类型名称 - [错误] 所有函数必须统一设置
SetLastError
为false
, 用户应该用本库封装好的GetLastError
获取错误码, 而不是调用Marshal.GetLastPInvokeError
- [编码] 所有的函数都应该显示指定
EntryPoint
, 指定ExactSpelling
为true
, 在使用到字符串的函数上应该指定对应字符集, 没使用到字符串的函数指定None
字符集 - [指针] 所有指针参数, 如若可以, 必须使用
ref
和out
- [命名] 所有函数必须使用大驼峰命名方式, 并不能包含字符集后缀.
- [命名:参数] 一般的, 不要对函数的参数名称进行更改, 除非使用了
ref
和out
, 则可以删去 lp 前缀
- 所有定义的常量都必须在库中使用枚举进行定义, 去除类型前缀, 并改为大驼峰命名. 枚举类型的大小也必须指定, 例如
uint
short
之类的
- [命名] 自定义类型诸如 PAINTSTRUCT, 名称与成员名称必须使用大驼峰, 并删去类型前缀(有必要的话需要添加后缀补充说明).
- [命名] 有必要则必须将定义的结构体名称改为全称, 例如
MSG
改为Message
,DevMode
改为DeviceMode
- [命名:成员] 有必要则必须将成员简写改为全称, 例如
DlgFrame
需要改为DialogFrame
(但是HTTP
这种大众皆知的缩写, 只需要使用Http
即可)
- [字符串] 传入字符串的函数必须有两个重载, 一个字符串传
string
, 另一个传char*
(ANSI 则是byte*
), 传出字符串也必须是两个重载, 一个传StringBuilder
, 另一个传char*
(ANSI 则是byte*
) - [结构体] 结构体定义时, 它的内存布局必须与非托管结构体内存布局一致, 保证在不使用 ref 参数封送, 而是直接传结构指针时也能正确使用
如果将简称改为全称严重影响美观, 就不要改了
- C++ 中的
long
实际上指的是 C# 中的int
(32位有符号整数)
已完成动态链接库: 无
正在编写的: user32.dll
更多信息, 请参阅 /work_progress 下的 xlsx 表格文件