用Ruby';s Win32API.new,isn';t';L';与'相同;我';,那么';N';或';P';?
在一些文档中,Ruby的Win32API有用Ruby';s Win32API.new,isn';t';L';与'相同;我';,那么';N';或';P';?,ruby,winapi,Ruby,Winapi,在一些文档中,Ruby的Win32API有'L'和'N'来指定一个“数字”。。。在一些文档中,'L'是“long”。'N'是否已弃用,而'L'是否实际上与'I'相同?“数字”有点不那么具体 在 没有将布尔参数指定为'B'或'I',只有返回值 在 有 Win32API.new('kernel32.dll', 'FormatMessageA', 'LPLLPLP', 'L') 而不是更常见的['L','p','L',…]格式 hWnd是'L',因此'I'也会工作吗?(hWnd是窗口的句柄)
'L'
和'N'
来指定一个“数字”。。。在一些文档中,'L'
是“long”。'N'
是否已弃用,而'L'
是否实际上与'I'
相同?“数字”有点不那么具体
在
没有将布尔参数指定为'B'
或'I'
,只有返回值
在
有
Win32API.new('kernel32.dll', 'FormatMessageA', 'LPLLPLP', 'L')
而不是更常见的['L','p','L',…]格式
hWnd
是'L'
,因此'I'
也会工作吗?(hWnd
是窗口的句柄)
布尔参数是'B'
,与'I'
相同
所以基本上,我们可以使用大多数东西作为'I'
?即使是'P'
也应该是4字节,那么'I'
也应该工作吗?是否有更正式的规范
更新:现在我想了更多关于'p'
,它实际上将使用Ruby的String类对象,并获取内容缓冲区部分并将其传递到C函数中。所以使用'I'
可能不会触发这种行为。(示例:例如使用GetWindowText()
)L可以与I相同-但由于I存在,我会假设它表示“short”(C标准没有指定“整数”的长度)。
P可以与L相同——至少如果您使用的是32位ruby
Win32Api真的很难看,我建议不要使用它。您可以查看和or。我正在查看源代码,“L”和“I”之间的唯一区别似乎是“L”调用rb_num2; ulong
和中的“I”调用rb_num2; int
。因此,我想唯一的区别在于是否将其视为有符号值P'也是结果,但它遵循额外的逻辑,所以我可能会坚持文档中的建议。在最新版本的win32 api(1.4.5)中,我找不到任何提到“N”的地方,因此它可能已被弃用。Windows API不返回boolean
,但有些API返回BOOL
,这是一个int
(令人惊讶!)。简言之,我认为你不应该在所有事情上都使用“我”。据我所见,win32 api文档非常少。至少可以浏览源代码。Ruby 1.9版的PickAx手册也建议使用DL
,但我尝试了gem安装DL
,但它不存在。DL
应该包含在Ruby中-try需要DL
。但是dl
的文档更糟糕。我还在win32 api zip文件中的自述文件中看到:删除了“N”和“N”原型。现在请始终使用“L”表示长。