Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameW" (ByVal lpBuffer As String, nSize As Long) As Long
Private Sub Command2_Click()
Dim str As String * 255
GetComputerName str, 255
StrConv str, vbFromUnicode
能正確顯示
End Sub
uj5u.com熱心網友回復:
樓主,你的問題是?
uj5u.com熱心網友回復:
如果 Declare 時,要想用W版的API函式,那么“字串引數”都不能用String型別了,只能傳“指標”。比如這樣用,就可以“正確獲取資料”:
Option Explicit
Private Declare Function GetComputerName Lib "kernel32" _
Alias "GetComputerNameW" ( _
ByVal lpBuffer As Long, _
ByRef nSize As Long) As Long
Private Sub Command1_Click()
Dim strTemp As String
Dim w As Long
w = 255& ' 緩沖區長度
strTemp = String$(w, vbNullChar)
Call GetComputerName(StrPtr(strTemp), w)
Me.Caption = Left$(strTemp, w)
End Sub
uj5u.com熱心網友回復:
凡是呼叫通過Declare宣告的API函式,所有的String引數在呼叫、回傳時,它都要“隱含的進行編碼轉換”。因此,你主貼中的代碼,本來API函式已經在“字符資料緩沖區”放入的Unicode編碼的字串了;
但在“函式回傳”后,VB6把它當成ANSI格式編碼又“悄悄的”再給你“轉換成Unicode編碼”,
所以你必須又要“從Unicode編碼轉換回來”才能正確顯示。
結果:本來“根本不需要進行字串編碼轉換”的,在你的代碼中卻偏偏進行了3次轉換…………
uj5u.com熱心網友回復:
學習了
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/48514.html
標籤:API
