自己寫了個vc的dll,回傳型別為char*,現在問題是在vc中沒錯,messagebox顯示也是正確字串,但傳到pb就成了亂碼,如果在vc中我直接return “XXX字串”,則pb中沒有問題,如果char* re =某個字串,然后return re則就是亂碼,怎么回事啊?
uj5u.com熱心網友回復:
因為char是單位元組的,所以PB在宣告此類函式時得宣告為ansi,如:function string GetStr() library "YourDLL.dll" alias for "GetStr;ansi"
uj5u.com熱心網友回復:
這樣申明pb代碼直接出錯啊,版本pb9
uj5u.com熱心網友回復:
回傳字串出錯,要看你vc的工程是ANSI還是UNICODE,建議你還是使用UNICONDE代碼,使用wchar_t,wcscpy等寬字符函式
uj5u.com熱心網友回復:
建議最好不要回傳char*指標,DLL一般回傳int指示結果是否出錯,char*可以放在引數中
比如dll中
int f_aa(char* chBuf,int BufLen)
{
//對字符指標進行操作
}
//pb中呼叫
FUNCTION long f_aa( ref string chBuf,long BufLen) LIBARAY "xxx.dll"
//呼叫
string ls_buf
long ll_len
ll_len = 100
ls_buf = space(ll_len)
f_aa(ls_buf,ll_len)
如果DLL中回傳值為指標的話,涉及到一個記憶體釋放的問題
uj5u.com熱心網友回復:
你回傳了指標,pb是沒法處理的,pb針對指標的處理一般都是作為reference 型別的引數,傳入來處理轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/69727.html
標籤:API 調用
上一篇:在PB中如何打開pdf檔案?
下一篇:pb中treeview 顯示問題
