在pb中,經常會需要呼叫一些動態庫(dll)來實現功能的擴充套件,但dll一般都是c語言或delphi語言寫的,常常會使用指標,給出的引數也常常是指標形式的。雖然pb中可以加上ref關鍵字來指明傳遞的是引數位址,但實際使用中卻往往會出一些意想不到的結果,我最近在呼叫乙個dll時,使用ref傳遞乙個字串給dll,但最後dll取到的卻是一串亂碼,這說明傳給dll的位址錯了,dll取到了別的記憶體塊的資料,此時,pb只能望針興嘆了。
一、首先宣告乙個api函式:
function long lstrcpy(ref string destination, ref string source) library "kernel32.dll" alias for "lstrcpy;ansi";
string ls_src, ls_dst
long ll_address
ls_src = "pb中如何得到乙個字串變數的位址"
ls_dst = space(255)
ll_address=lstrcpy(ls_dst, ls_src )
void __stdcall changeprintersetting(lptstr pcustomformname, sizel* formsize);
按照正常的方式,在pb裡應該這樣宣告並呼叫:
public function integer changeprintersetting(ref string formname, ref stru_sizel size) library "prnset.dll" alias for "changeprintersetting;ansi";
string ls_fromname
stru_sizel size;
ls_fromname = "我的表單格式"
size.cx = 100000
size.cy = 200000
changeprintersetting(
ls_fromname, size)
public function integer changeprintersetting(long formname, ref stru_sizel size) library "prnset.dll" alias for "changeprintersetting;ansi";
string ls_fromname, ls_temp
stru_sizel size;
ls_fromname = "我的表單格式"
ls_temp = space(255)
ll_address=lstrcpy(ls_temp, ls_fromname)
size.cx = 100000
size.cy = 200000
changeprintersetting(
ll_address, size)
這樣,dll裡就取到了正確的中文字串。這樣多寫了幾行**,儲存了引數正確傳遞,也算是沒有辦法的辦法吧。
總得說來,pb對於快速開發資料庫應用方面的確有其獨特的優勢,但遇到需要用第三方語言來擴充套件功能的時候,就顯得力不從心了。
乙個字串中如何得到漢字的個數
最近碰到了一面試題 乙個字串中如何得到漢字的個數?比如 adf我jk愛sdf莫能助lkka 要求寫乙個方法得出其中漢字的個數,並取得這些漢字。自己想了半天沒做出來,在csdn發了個貼子得到了答案,在此感謝csdn的,huyc fly 希望他不會介意我把他的方法發出來與大家,也許大家還有別的解決方法,...
js如何獲取乙個字串在另外乙個字串中的下標
有字串 a 34 b 123456789 要求定義乙個函式返回b字串中第乙個匹配a字串的下標,不得使用現有的方法 indexof 兩種解決辦法 substr 方法可在字串中抽取從 start 下標開始的指定數目的字元。const b,a return 1 let a 34 let b 1234567...
在乙個字串中尋找另外乙個字串
在乙個字串中尋找另外乙個字串 public class text foundit true break test system.out.println foundit?found it didn t find it 該段程式有點難以理解,主要就是if語句的理解,if searchme.charat ...