2010-07-25 43 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

相關問題