Delphi字串 DLL傳遞字串方式

2021-08-12 00:24:34 字數 2154 閱讀 5620

由於是半路出家,寫起**來比較隨性。每次在寫dll傳遞字串時需要費很大的勁。

在這裡來乙個demo演示一下:

dll**:

library dlltest1;

uses

sysutils,

classes;

procedure fun1(p1: pchar; var p2: pchar); stdcall;

var str: string;

begin

str:= p1;

p2:= pchar(str+str);

end;

procedure fun2(p1, p2: pchar); stdcall;

var str: string;

begin

str:= p1;

strcopy(p2,pchar(str+'#'+str));

end;

procedure test(p: pchar); stdcall;

const

title = 'title ';

var str: string;

begin

str := p;

strcopy(p, title);

strcat(p, pchar(str));

end;

exports

fun1,

fun2,

test;

begin

end.

測試程式**:

procedure fun1(p1: pchar; var p2: pchar); stdcall; external 'dlltest1.dll';

procedure fun2(p1, p2: pchar); stdcall; external 'dlltest1.dll';

procedure test(p: pchar); stdcall; external 'dlltest1.dll';

procedure tform1.btn1click(sender: tobject);

var p: pchar;

begin

fun1(pchar('123'),p);

showmessage(p);

end;

procedure tform1.btn2click(sender: tobject);

var arr: array of char;

str: string;

begin

setlength(arr,100);

fun2(pchar('123'),@arr[0]);

str:= strpas( @arr[0]);

showmessage(str);

setlength(arr,0);

end;

procedure tform1.btn3click(sender: tobject);

var p: pchar;

begin

inc(num);

p := stralloc(255);

strcopy(p, pchar(inttostr(num)));

test(p);

text := p;

strdispose(p);

end;

movememory原型;

procedure movememory(destination: pointer; source: pointer; length: dword);
重點理解,string是字元陣列,轉化為指標的方式與一般陣列一樣:

procedure tform1.btn2click(sender: tobject);

var str,str2: string;

arr: array of char;

begin

str:= '123465';

setlength(arr,length(str));

movememory(@arr[0],@str[1],6);

str2:= strpas(@arr[0]);

showmessage(str);

end;

C 呼叫Dll 傳遞字串指標引數

最近用c 寫乙個小軟體,要呼叫vc寫的dll,傳遞引數給dll,由於是非託管 所以呼叫起來有點麻煩,要把引數轉換成非託管 的指標引數,然後再傳遞給dll using system.runtime.interopservices 操作dll的類空間 class cgicomindex marshal....

Delphi 字串操作

常忘記,在此做筆記。這幾個函式都包含在strutils中,所以需要uses strutils 假設字串是 dstr delphi is the best 那麼 leftstr dstr,5 delph midstr dstr,6,7 i is th rightstr dstr,6 e best fu...

Delphi字串處理

悲催啊,使用了這麼久的delphi,還是沒有理解字串。今天看了一篇文章稍有理解。1.段字串shortstring。短字串的管理師這樣的,類似陣列 0處儲存字串的長度,從1處開始了內容,shortstring的總長度是256,因此,實際的內容長度只能為255,並且內容結束沒有結束字元,即不是以 0結尾...