vb 呼叫c++ dll 時 wchar_t 應該怎么對應?
uj5u.com熱心網友回復:
string不就行了。至于轉換的百度win32api。uj5u.com熱心網友回復:
VC對接VB的字串可以用BSTR型別,你可以搜索 BSTR 轉 wchar_tuj5u.com熱心網友回復:
VC代碼不能改,不是我開發的uj5u.com熱心網友回復:
可以寫個適配DLL,用標準DLL或者ActiveX DLL;uj5u.com熱心網友回復:
可以寫個適配DLL,用標準DLL或者ActiveX DLL;uj5u.com熱心網友回復:
如果你實在想把Unicode的字串傳給API,可以用位元組陣列來傳資料。比如先將某個字串轉換為Unicode編碼到位元組陣列中,然后再把這個位元組陣列傳遞過去,如:
Private Declare Function MessageBox Lib "user32" Alias "MessageBoxW" (ByVal hwnd As Long, _
ByRef lpText As Any, _
ByRef lpCaption As Any, _
ByVal wType As Long) As Long
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpMultiByteStr As String, _
ByVal cchMultiByte As Long, _
ByRef lpWideCharStr As Any, _
ByVal cchWideChar As Long) As Long
Private Const CP_ACP = 0 ' default to ANSI code page
Private Sub Command1_Click()
Dim str_message As String, _
str_title As String, _
array_message() As Byte, _
attay_title() As Byte
str_message = "這是 UNICODE 提示資訊,請您確定。"
str_title = "UNICODE 標題"
array_message = ASCII2UNICODE(str_message)
attay_title = ASCII2UNICODE(str_title)
MessageBox 0, array_message(0), attay_title(0), 64
End Sub
Private Function ASCII2UNICODE(ByVal in_str_ascii As String) As Byte()
Dim wLength As Long, _
out_buff() As Byte
wLength = MultiByteToWideChar(CP_ACP, 0, in_str_ascii, -1, vbNull, 0) ' 取得要轉換的寬字符空間大小
ReDim out_buff(wLength)
MultiByteToWideChar CP_ACP, 0, in_str_ascii, -1, out_buff(0), wLength
ASCII2UNICODE = out_buff
End Function
uj5u.com熱心網友回復:
可用,謝謝.
uj5u.com熱心網友回復:
其實用不著那么麻煩。API宣告中,把wchar_t引數宣告為 byval wc as long ,
在VB6呼叫時,用 strptr(字串變數或常量) 傳遞就行了。
比如6樓所說的 MessageBoxW ,在宣告時,第2個和第3個引數都改為 byval xx as long
然后呼叫時,這樣即可:
MessageBox 0, strptr("訊息提示內容"), strptr("訊息標題"), 64
uj5u.com熱心網友回復:
好的,我試下!轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/8902.html
標籤:API
上一篇:Vb6.0 打不開 提示windows installer準備安裝
下一篇:查找程式是否已經運行的三種方法:
