呼叫一個外部com口設備的dll。比如說函式名read(字串,數值); 其中 回傳的字符,都是雙指標。
如果只是普通的指標read(ref string,long);
現在雙指標如果還用這個方法 取出的都是亂碼。請教,如何獲取雙指標的字串的值。
uj5u.com熱心網友回復:
參考這個試試在呼叫外部dll中的函式時,經常會用到指標。那么在pb中如何實作呢?
先看一個dll說明檔案中的函式宣告:
Function GetFamInfo(info:pchar,out flag:integer):pchar;stdcall; // flag是一個出口引數 函式的回傳值和第一個引數都是指標型別
pchar是delphi中的指標型別。那么我們在pb中應該怎么宣告和呼叫呢?
首先在pb的declare global external functions中宣告外部dll函式:
public function long GetFamInfo(long info, ref int flag) library "nccm_interface.dll" ALIAS FOR "GetFamInfo"
然后在工程中呼叫:
long rtn
int flag
long famInfo
rtn = GetFamInfo(famInfo, flag)
sle_1.Text = String(flag)
sle_2.Text = string(rtn, "address")
long型別在pb中可以作為指標型別,當long作為一個字符型指標時,可以用String(long,"address")這個方法,讀出long指標地址真所保存的字串,并付給一個字符型變數。
如果這個不行,估計用pb很難實作,建議你用delphi或者c之類的再寫個中轉的dll,通過這個中轉dll去調那個雙指標,在pb中呼叫你的中轉dll就行了
uj5u.com熱心網友回復:
這個方法我也用過,但是的出來的始終是亂碼,郁悶了啊。uj5u.com熱心網友回復:
是不是編譯的問題,你這樣試試ls_temp = String(long, "address" )
lb_blob = blob(ls_temp) //EncodingUTF16LE! is default
ls_result = string(lb_blob, EncodingANSI!)
如果還不行,就用別的語言做個dll吧,中轉一下
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/24681.html
標籤:API 調用
上一篇:銷售系統是繁體的,在繁體還是簡體的系統里用sybasecentral連接DB查看資料庫里表內容發現記錄的中文都是亂碼
下一篇:銷售系統是繁體的,在繁體還是簡體的系統里用sybasecentral連接DB查看資料庫里表內容發現記錄的中文都是亂碼
