VB中呼叫c++ dll 回傳wchart_t* 如何實作 例如 wchart_t* TagName(); 釋放時呼叫 FreeString(wchart_t* pVal)
不是vb。net
在vb中如何呼叫此dll
uj5u.com熱心網友回復:
wchart_t* 就是“寬位元組字符指標“吧!應該就是一串UTF-16編碼的字串資料。這個API是不是還有一個回傳引數,是代表字符數的?
VB6的宣告應該就是類似這樣:
Private Declare Function TagName Lib "XXXX.dll" ( ) as long
呼叫時,用一個Long型別變數接識訓傳值。
要獲取資料,就另外用一個位元組陣列或者String型別變數,通過API copymemory() 來拷貝。
如果沒有“長度”的回傳引數或函式介面,那么它肯定就是用vbNullChar來標識結束的(wchart_t應該是用連續兩位元組0)。
反正你要注意,在copymemory() 之前,位元組陣列或String變數,要先“開辟足夠大的資料區”!
接收TagName() 回傳值的變數,是要用Byval 形式傳遞給copymemory。
uj5u.com熱心網友回復:
還有個問題作業系統的filetime在VB中如何顯示在文本框中uj5u.com熱心網友回復:
跟你說的差不多,我使用的strcpy
uj5u.com熱心網友回復:
用strcpy也應該能達到效果。但同樣要注意“事先開辟足夠大的資料區”。
uj5u.com熱心網友回復:
Private Declare Sub GetSystemTimeAsFileTime Lib "Kernel32" (ByRef lpSystemTimeAsFileTime As FILETIME)
uj5u.com熱心網友回復:
想到一個問題:strcpy是“A版”的API,你用它拷貝資料,很可能出現字串不完整的情況。
如果是UTF-16編碼,那任意一個標準ASCII字符的第二個字符就是0,這樣只要遇到西文字符,它就認為字串已經結束了。
只有在字串不包含標準ASCII字符的情況下才適用。
當然,如果這個wchart_t*指向的字串是UTF-8編碼的,也可以用strcpy來正確拷貝。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/92473.html
標籤:API
上一篇:list求助
下一篇:求vb大作業
