新聞速報

        

2017年7月13日 星期四

Data type conversions for API DLL calls from Visual Basic

In Visual Basic, you need to include the the ByRef or ByVal keyword explicitly in the declaration. The aliases used in the orginal C-style declarations already have this set.

C data type Declare as Description
BYTE, CHAR ByVal variable As Byte A single byte in the memory
BOOL ByVal variable As Long Long that's that should have the value 1 or 0
ATOM ByVal variable As Integer An expression that evaluates to an Integer
SHORT ByVal variable As Integer An 16 bit value, like the integer type used in Visual Basic
INT ByVal variable As Long A 32 bits integer value
LONG ByVal variable As Long Synonym for INT
WORD ByVal variable As Integer An integer value, or two (bit wise concatenated) BYTES *
DWORD ByVal variable As Long A long value, or two (bit wise concatenated) WORDS *
UINT ByVal variable As Long A 32 bits integer that can't have values below 0 *
LPARAM, WPARAM, LRESULT ByVal variable As Long Synonym for INT, used in some cases to describe the expected value
COLORREF ByVal variable As Long Synonym for INT; A simple RGB color code; but not like OLE_COLOR does *
HWND, HDC, HMENU, etc. ByVal variable As Long Synonym for INT; used in some cases to describe the expected value (a handle).
LPDWORD, LPINT, LPUINT variable As Long Long Pointer to the data type after LP
LPWORD variable As Integer Long Pointer to a WORD
LPRECT variable As RECT Long Pointer to a Type RECT structure
LP* variable As (type) Long Pointer to a variable, structure or function *
LPSTR, LPCSTR ByVal variable As String A String variable, Visual Basic converts the values
LPVOID variable As Any Any variable (use ByVal when passing a string)
NULL As Any or

ByVal variable As Long
Only supply ByVal Nothing, ByVal 0& or vbNullString as value
VOID Sub procedure Not applicable; void means empty, nothing, nada, nope



特別說明

COLORREF

COLORREF值是紅 - 綠 - 藍組合。 Visual Basic使用OLE_COLOR ,它也可以存儲系統顏色標識符。 COLORREF類型不支持此功能。 要轉換該類型,請使用oleTranslateColor() API。

DWORD,WORD

很多時候,您可以將這些類型視為長期值。 DWORD也用於存儲兩個值; LoWord和HiWord。 HiWord存儲在前兩個字節中,LoWord存儲在long值的最後兩個字節中。

字符串

字符串自動轉換為C風格的等價物。 將它們作為ByVal 變量 As String傳遞。 如果需要將String存儲在結構中, StrPtr()StrConv()等函數非常有用。

指針

指針是存儲變量的存儲位置的特殊類型。 Visual Basic不允許直接使用指針,但在參數列表中使用ByRef具有所需的效果。 它會將變量的內存位置(指針)傳遞給函數。

功能指針

可以使用AddressOf運算符傳遞指向函數的指針。 大多數回調函數提供了一個附加參數,以包括自定義長值( lParam參數)。 要將對象指針傳遞給該值,請使用ObjPtr() 在回調函數中,您可以使用CopyMemory() API將long值複製到未初始化的對象。

無符號類型

像C和C ++這樣的語言支持所謂的「無符號類型」。 這些類型的Visual Basic不支持不同的範圍。 正常的Long支持負值和正值。 在無符號長度中,不使用負範圍。
這使得可以在數據類型中存儲更大的正值。 例如,值HFFFFFFFF(-1為長)為4294967295,這是Visual Basic Long類型可以處理的兩倍。

沒有留言:

張貼留言