String类型是Borland自定的特殊类型,使用起来真是无比方便,
但是,它需要borladmm.dll的支持,在动态链接库中想使用STRING类型
要经过特殊的手段,因此还是使用PCHAR类型吧。PCHAR也挺方便的,如果你确实一定要用String类型的话,就在DLL,Exe的工程文件中第一个Uses中的第一位置加入 ShareMem.
但是,它需要borladmm.dll的支持,在动态链接库中想使用STRING类型
要经过特殊的手段,因此还是使用PCHAR类型吧。PCHAR也挺方便的,如果你确实一定要用String类型的话,就在DLL,Exe的工程文件中第一个Uses中的第一位置加入 ShareMem.
上面那段程序如果放到dll中需要做一些怎么样的修改呢?
还有就是你能否帮我把上面那段程序改成PChar类型的呢?
我很菜,谢谢你先
能不能写出改过的代码呢?谢谢
var
tmp1:string;
len1,len2,i,j:Integer;
begin
len1:=Length(s1);
len2:=Length(s2);
SetLength(tmp1,len1);
j:=1;
for i:=1 to len1 do
begin
tmp1[i] := Chr(Ord(s1[i-1])+Ord(s2[j-1]));
Inc(j) ;
if j = len2+1 then j := 1 ;
end;
Result := pchar(tmp1) ;
end;
只要不出现在调用中就是可以的了,在程序内部出现都是没有关系的。
不然string也就没有存在的意义了,你说呢?
我是做完了才贴上来的呀!你在dll中是不是这样写的?
function proc1(s1,s2: pchar): pchar; stdcall;
var
tmp1:string;
len1,len2,i,j:Integer;
begin
len1:=Length(s1);
len2:=Length(s2);
SetLength(tmp1,len1);
j:=1;
for i:=1 to len1 do
begin
tmp1[i] := Chr(Ord(s1[i-1])+Ord(s2[j-1]));
Inc(j) ;
if j = len2+1 then j := 1 ;
end;
Result := pchar(tmp1) ;
end;exports
proc1;引用的单元中是不是这样写的?
function proc1(s1,s2: pchar): pchar;stdcall;implementation{$R *.DFM}function proc1; external 'project1.dll' name 'proc1';