由於是半路出家,寫起**來比較隨性。每次在寫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結尾...