PB中如何得到乙個字串變數的位址

2021-08-30 03:40:07 字數 1897 閱讀 1409

在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 ...