B
beer_xjx
Unregistered / Unconfirmed
GUEST, unregistred user!
我d6中写的一个一个DLL中的函数,作用是返回一个邮箱的邮件的列表。我要在PB中用,以下是代码,功能都可以实现。但有几个问题,很基础,但我不会,请别见笑!
1,在我通过PB接到的返回值也就是ls_all,在字符串前总有一些莫名其妙的字符,为什么?
2,在我用strcat时,先getmem(ls_all,10000)比胡芦画飘^_^!我随便给分了10000,字节?
不知多不多,反正也不要钱!像我这种情况,给ls_all分内存?标准是什么?有没有其 它连接pchar类型的字符串的用法?
3,按理说,我 GetMem(ls_all,10000);id_pop:=TIdpop3.Create(nil); id_msg:=Tidmessage.Create(nil);在用完之后,就应该free掉,是吗?但我这样做在D6本身调用中(按法律FREE掉)没问题,但生成dll之后,在PB中调用是就不行了,我只能省了free,这样做在PB和D6中都不会错,我想是不对的,那么我该怎么做?另外不FREE它有什么隐患?
4,在另外一个函数strlcat 有这相关一个用法:var firsthalf pchar
FirstHalf^ := Chr(0);这个作用是什么?
谢谢各位了!
function getmaillist(pop3serverchar;pop3port:integer;pop3userchar;pop3passchar)char ; stdcall;
var
ls_pop3server,ls_pop3user,ls_pop3pass,ls_all,ls_itemchar;
li_pop3port,li_mailCount,li_next :integer;
id_pop:TIdpop3;
id_msg:Tidmessage;
begin
ls_pop3server:=pop3server;
ls_pop3user:=pop3user;
li_pop3port:=pop3port;
ls_pop3pass:=pop3pass;
id_pop:=TIdpop3.Create(nil);
id_msg:=Tidmessage.Create(nil);
//如果已经连接,就断开
if id_pop.Connected then
begin
id_pop.Disconnect;
end ;
//连接邮件服务器
id_pop.Host :=ls_pop3server; //邮件服务器名
id_pop.Port :=li_pop3port; //端口
id_pop.UserID :=ls_pop3user; //用户号
id_pop.Password :=ls_pop3pass; //密码
id_pop.Connect;//连接服务器
li_mailCount :=id_pop.CheckMessages ;//共有几封邮件,?怎样判断是否打开过??
GetMem(ls_all,10000);
for li_next:=1 to li_mailCount do
begin
id_msg.Clear;
try
id_pop.Retrieve(li_next,id_msg);
//*相加
ls_item:=pchar(id_msg.From.Text+#9+id_msg.Subject+#9+DateTimeToStr(id_msg.Date)+#9+IntToStr(id_pop.RetrieveMsgSize(li_next))+#13);
ls_all:=strcat(ls_all,ls_item);
finally;
end;
end ;
id_pop.Disconnect;
result:=ls_all;
end ;
1,在我通过PB接到的返回值也就是ls_all,在字符串前总有一些莫名其妙的字符,为什么?
2,在我用strcat时,先getmem(ls_all,10000)比胡芦画飘^_^!我随便给分了10000,字节?
不知多不多,反正也不要钱!像我这种情况,给ls_all分内存?标准是什么?有没有其 它连接pchar类型的字符串的用法?
3,按理说,我 GetMem(ls_all,10000);id_pop:=TIdpop3.Create(nil); id_msg:=Tidmessage.Create(nil);在用完之后,就应该free掉,是吗?但我这样做在D6本身调用中(按法律FREE掉)没问题,但生成dll之后,在PB中调用是就不行了,我只能省了free,这样做在PB和D6中都不会错,我想是不对的,那么我该怎么做?另外不FREE它有什么隐患?
4,在另外一个函数strlcat 有这相关一个用法:var firsthalf pchar
FirstHalf^ := Chr(0);这个作用是什么?
谢谢各位了!
function getmaillist(pop3serverchar;pop3port:integer;pop3userchar;pop3passchar)char ; stdcall;
var
ls_pop3server,ls_pop3user,ls_pop3pass,ls_all,ls_itemchar;
li_pop3port,li_mailCount,li_next :integer;
id_pop:TIdpop3;
id_msg:Tidmessage;
begin
ls_pop3server:=pop3server;
ls_pop3user:=pop3user;
li_pop3port:=pop3port;
ls_pop3pass:=pop3pass;
id_pop:=TIdpop3.Create(nil);
id_msg:=Tidmessage.Create(nil);
//如果已经连接,就断开
if id_pop.Connected then
begin
id_pop.Disconnect;
end ;
//连接邮件服务器
id_pop.Host :=ls_pop3server; //邮件服务器名
id_pop.Port :=li_pop3port; //端口
id_pop.UserID :=ls_pop3user; //用户号
id_pop.Password :=ls_pop3pass; //密码
id_pop.Connect;//连接服务器
li_mailCount :=id_pop.CheckMessages ;//共有几封邮件,?怎样判断是否打开过??
GetMem(ls_all,10000);
for li_next:=1 to li_mailCount do
begin
id_msg.Clear;
try
id_pop.Retrieve(li_next,id_msg);
//*相加
ls_item:=pchar(id_msg.From.Text+#9+id_msg.Subject+#9+DateTimeToStr(id_msg.Date)+#9+IntToStr(id_pop.RetrieveMsgSize(li_next))+#13);
ls_all:=strcat(ls_all,ls_item);
finally;
end;
end ;
id_pop.Disconnect;
result:=ls_all;
end ;