引述:http://cappella.dante.com.tw/GuestBook/show.asp?id=3429
VC VB
FARPROC Long
BOOLEAN Byte
BSTR Long
BYTE Byte
CHAR Byte
DATE Double
DWORD Long
DWORDLONG Double
FLOAT Single
HANDLE Long
HBITMAP Long
HBRUSH Long
HDC Long
HICON Long
HMENU Long
HWND Long
INT Integer
LONG Long
指向整數的指標
LPARAM (ByRef ) Long
LPCSTR (ByRef ) Long
LPCTSTR (ByRef ) Long
LPCVOID (ByRef ) Long
LPCWSTR (ByRef ) Long
LPDWORD (ByRef ) Long
LPLPVOID (ByRef ) Long
LPSTR (ByRef ) Long
LPTSTR (ByRef ) Long
LPVOID (ByRef ) Long
LPBYTE (ByRef ) Byte
PVOID Long
SHORT Integer
UINT Long
void* Long
WCHAR Integer
WORD Integer
WPARAM Long
___int16 Integer
___int32 Long
___int64 Double
___int8 Byte
BOOLEAN -> Boolean (OLE)
BSTR -> String (OLE)
BYTE -> Byte (OLE)
DATE -> Date (OLE)
DWORDLONG -> Double 或 Currency 或見最下方
INT -> Long
___int64 -> Double (這個可以這麼轉, 也可以用Currency, 另也可以用以下的方式解決)
Type Int64
ULWord As Long
LLWord As Long
End Type
首先,VB 的 ByRef 相當於 C/C++ 的 indirect by pointer。 所以 C/C++ 的參數若為 pointer 型別,在 VB 便用 ByRef 對應 。不過我不清楚像 int*** 這種型別,究竟該怎麼對應就是了。
再來就是, C/C++ 的 char* 對應到 VB 直接是 ByVal As String ,因為 VB 的 String 採用 BSTR 的機制,與 C/C++ 的 string 可以相容。只有兩點必須注意:
VB 的 String 不以 "\0" 結尾,而是前冠以長度的 header。因此,從 C/C++ 的 DLL 獲得 String 後,必須用
foo = Left(foo, InStr(foo, vbNullChar) - 1) 將 "\0" 之後的部分去掉。
若要傳 output string buffer 進 C/C++ 的 DLL 時,記得必須先製作好該 buffer,否則若 VB 的
String 只有宣告就拿來用,便只是相當於只是傳入一個 NULL。製作 buffer 的方法為:foo = String(BUF_SIZE,
vbNullChar),其中 BUF_SIZE 為 buffer 所需的長度。
留言列表