如何在DLL Delphi中使用IdFTP

最好的

当我注入DLL时,ShowMessage可以正常工作,但是当我使用IdFtp时,远程进程崩溃。

library FTP_DLL;

uses
SysUtils,Classes,IdFTP,Dialogs;

{$R *.res}

var
IdFTP1: TIdFtp = nil;


begin
  IdFTP1.Host := 'My ftp server';
  IdFTP1.UserName := 'user';
  IdFTP1.Password := 'password';
  IdFTP1.Connect;
  IdFTP1.Put('C:\test.txt','test.txt',False);
  ShowMessage('ok') ;
end.

谢谢你。

大卫·赫弗南(David Heffernan)

这里最糟糕的问题是代码在内部运行DllMain允许您在中执行严格的限制DllMain我非常确定您会以多种方式违反规则。

您应该将此代码移到之外DllMain产生一个新线程来运行代码(从中允许)DllMain,或者在导出的函数中执行代码。

整理完之后,您将需要实际实例化您使用的对象。现在,您可以像这样初始化它:

var
  IdFTP1: TIdFtp = nil;

试图做任何事情IdFTP1显然都会失败。您将需要实例化一个对象。我猜您习惯于将组件放到设计图面上并让框架为您实例化所有内容。好吧,这不是这里的选择,您将需要显式创建您使用的对象。

也许您可以尝试以下方法:

library FTP_DLL;

uses
  IdFTP;

procedure Test; stdcall;
var
  IdFTP: TIdFtp;
begin
  IdFTP := TIdFtp.Create(nil); // pass nil as the owner, we take charge of lifetime
  try
    IdFTP.Host := 'My ftp server';
    IdFTP.UserName := 'user';
    IdFTP.Password := 'password';
    IdFTP.Connect;
    IdFTP.Put('C:\test.txt','test.txt',False);
  finally
    IdFTP.Free;
  end;
end;

exports
  Test;

begin
end.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章