再提问题,为了写成的DLL在VC的环境中也能用,是不是一定不能为STRING????:((100分)

  • 主题发起人 主题发起人 天真
  • 开始时间 开始时间

天真

Unregistered / Unconfirmed
GUEST, unregistred user!
也就是说是不是这样也不行????
var
s,s1:string;
temp : pchar;
begin
s:='aaaa';
s1:='bbbb';
temp := pchar(s+s1);
end;
如果不行的话,
我现在有两个PCHAR型的变量,如何把它俩合并???
 
不一定,里面可以使用String,但是接口最好不用String。
 
还有,如果你需要合并两个pchar,看下面的Delphi例子
procedure TForm1.Button1Click(Sender: TObject);
var
Buffer: PChar;
begin
GetMem(Buffer,Length(Label1.Caption) + Length(Edit1.Text) + 1);
StrCopy(Buffer, PChar(Label1.Caption));
StrCat(Buffer, PChar(Edit1.Text));
Label1.Caption := Buffer;
Edit1.Clear;
FreeMem(Buffer);
end;
 
我接口是不用STRING,这样就行了?
那么发布时要不要再加什么,比如相对应的DLLL?
 
你说的是BorladMM.dll,不知道。呵呵,因为我的计算机和能够测试的环境都有Delphi。呵呵。
理论上是不需要,但是,天知道实际……
 
呵,如果是可以用的话,是不是可以这样写?
buffer:=pchar(Label1.Caption);
buffer:=pchar(edit1.text+string(buffer));
 
String到PChar的转换,最好使用StrpCopy,而不是直接强制类型转换。
 
谢谢了:)
 
实验一下,很多是理论的东西,亲自做一次就什么都清楚了……
还有,你不妨可以实验一下接口为String类型的,挺好玩,需要在调用近程里面将Borlandmm作为第一个uses的,否则无效,呵呵。
 
yzhshi:
有点问题的是,我不一定是只是合并两个PCHAR的呀
你看每次合并是不是都要动态分态内存呀!那不是太麻烦了???
 
yzhshi,其实我也挺想实践的呀,但现在没时间:(
急着赶工呢!!
 
你直接使用String不就可以了吗?
在Delphi中,是推荐使用String而不是pChar的,按他的说法:pChar是为兼容其他语言期间而使用的。
当然对于动态库接口还需要使用pChar等指针类型,同时,尽量注意内存的分配问题。
否则一定会蹦叉的。
 
我明白了,只要把接口设为PCHAR就行了,是吧,
其实我就怕里面用STRING有问题呀,
因为,我的DLL VC也是要调用的,我怕出错
 
应该没问题的。
否则Delphi编程一直使用pchar,那么Form1.Caption怎么办呢?那个可是String的。哈哈。。。
 
呵,好的,我去试试
 
首先测试一下,这是最好的,要知道,听说的,只能认为是可能的,而做过的,就是一定的。
 
为什么这样又出错了!!!???
DLL的原文件!
library DLL_Test;
uses
SysUtils,
StdCtrls,
Dialogs,
Classes;

{$R *.RES}
var Edit1 :TEdit;
temp : pchar;

procedure InitEdit;
begin
Edit1 := TEdit.Create(nil);
end;

procedure evaluate(s:pchar);
begin
temp :=s;
Edit1.Text := temp;
showmessage(temp);
end;

procedure Clear;
begin
Edit1.free;
end;

exports
Clear,
evaluate,
initedit;

begin
end.

调用的源文件!!!!
procedure InitEdit;stdcall;External'DLL_Test.dll';
procedure evaluate(s:pchar);stdcall;External'DLL_Test.dll';
procedure Clear;stdcall;External'DLL_Test.dll';

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
InitEdit;
end;

procedure TForm1.Button2Click(Sender: TObject);
var buffer :pchar;
s:string;
begin
s:='aaa';
getmem(buffer,length(s));
buffer :=strcopy(buffer,pchar(s));
evaluate(buffer);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
// evaluate(pchar('iloveyou'));
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
Clear;
end;

调用evaluate这个函数时出错,为什么?
 
1、procedure evaluate(s:pchar);Stdcall;
两个Stdcall要对应,都写上。否则会出Bug的。
 
真不好意思,太粗心了,连这个也没看:(
谢谢
 
谢谢YZHSHI
 
后退
顶部