引述: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 所需的長度。

arrow
arrow
    全站熱搜

    Joe Joe 發表在 痞客邦 留言(0) 人氣()