在這種情況下:
x = Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(0x01)
我理解了整個代碼,單擊滑鼠左鍵時它回傳一個值。但是,我想知道為什么程式員使用這樣的符號[
作為['i']
引數。我知道引數是用于匯入的型別并且i
表示整數,但為什么要使用[' ']
?
uj5u.com熱心網友回復:
的第三個引數Win32API.new()
是一個型別陣列,因為一個函式可以有多個輸入引數。
GetAsyncKeyState()
有 1 個輸入引數,它是一個整數,所以它['i']
是一個 1 型別的陣列來反映這一事實。
隨后'i'
的不是陣列,因為一個函式只能有 1 個回傳值。在這種情況下,GetAsyncKeyState()
回傳一個整數作為輸出。
這在Yukihiro Matsumoto的《Ruby in a Nutshell》一書中提到:
Win32API::new(dll, proc, import, export)
回傳表示由name in
Win32API
指定的函式的物件,其簽名由and指定。是表示型別的字串陣列。是指定字串的型別。proc
dll
import
export
import
export
也許下面的例子會讓你更清楚:
呼叫 Windows API
int WINAPI MessageBox( _In_opt_ HWND hwnd, _In_opt_ LPCTSTR lpText, _In_opt_ LPCTSTR lpCaption, _In_ UINT uType );
...
require "Win32API" title = "Rubyfu!" message = "You've called the Windows API Successfully! \n\n@Rubyfu" api = Win32API.new('user32', 'MessageBoxA', ['L', 'P', 'P', 'L'], 'I') api.call(0, message, title, 0)
uj5u.com熱心網友回復:
請注意,Ruby 1.9.1 已棄用 Win32API。當前版本只是一個包裝Fiddle
,建議您Fiddle
直接使用作為更新的替代方案。
該Fiddle::Import
模塊提供了一個簡單的 DSL 來宣告 C 函式和其他型別SHORT
,例如在 Ruby 模塊中,例如:
require 'fiddle/import'
module User32
extend Fiddle::Importer
dlload 'user32'
typealias 'SHORT', 'short'
extern 'SHORT GetAsyncKeyState(int)'
end
之后,您可以將 C 函式作為該模塊的 Ruby 類方法呼叫:
x = User32.GetAsyncKeyState(1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/508368.html
上一篇:js函式獲取欄位中的所有值