2010-07-25 68 views
1

在某些文档中,Ruby的Win32API具有'L''N'来指定“数字”......并且在某些文档中,'L'是“long”。是否'N'已弃用,而不是'L'实际上与'I'相同? “数字”有些不那么具体。在Ruby的Win32API.new中,'L'不是'I','N'或'P'是什么?

http://rubyforge.org/docman/view.php/85/3463/API.html#M000001

没有指定一个布尔参数为'B''I',只有返回值...

http://www.ruby-doc.org/stdlib/libdoc/Win32API/rdoc/classes/Win32/Registry/Error.html#M001622

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()

回答

1

我看win32-api源代码,它看起来像“L”之间的唯一区别“我”是“L”调用rb_num2ulong和“我”调用<ruby.h>rb_num2int。所以我猜想唯一的区别就是治疗是否符合签名值。 'P'的结果也是rb_num2ulong,但它遵循附加逻辑,所以我可能会坚持文档建议的内容。我没有在最新版本的win32-api(1.4.5)中发现任何'N',所以它可能被弃用了。 Windows API不返回boolean,但有些返回BOOL,这是(惊喜!)和int。总之,我认为你不应该用“我”来做任何事情。 win32-api文档与我见过的相比很少。至少源代码可供浏览。

+0

我还在win32-api zip文件的README文档中看到:'删除了'N'和'n'原型。现在长时间使用'L'。“ – 2010-07-26 02:39:47

1

L可能与I相同 - 但由于我存在,我会假设它代表“短”(C标准没有指定“整数”的长度) 。 P可能与L相同 - 至少如果您使用的是32位红宝石。

Win32Api真的很丑,我建议不要使用它。你可以看看FFI - Foreign Function InterfaceexamplesWindows examples

+0

Ruby 1.9的PickAx书籍也推荐使用'DL',但我试过'gem install dl'并且它不存在。 – 2010-07-25 04:05:53

+0

'dl'应该包含在ruby中 - 试试'require dl'。但'dl'的文档更糟。 – 2010-07-25 10:44:23

相关问题