我有一个简单的TCP服务器应用程序,我已从互联网上复制过来。
unit TCPServer;
interface
uses
System.SysUtils, System.Variants, System.Classes,
FMX.Forms, FMX.Dialogs, IdBaseComponent, IdComponent, IdSocketHandle,
IdCustomTCPServer, IdTCPServer, IdContext;
type
TForm2 = class(TForm)
Tserver: TIdTCPServer;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure TserverExecute(AContext: TIdContext);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
Binding : TIdSocketHandle;
begin
Tserver.DefaultPort := 16000;
Tserver.Bindings.Clear;
Binding := Tserver.Bindings.Add;
Binding.IP := '0.0.0.0';
Binding.Port := 16000;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Tserver.Active := True;
end;
procedure TForm1.TserverExecute(AContext: TIdContext);
Var
C : String;
begin
C:= AContext.Connection.Socket.ReadLn();
if C = 'TESTSTRING' then
begin
AContext.Connection.Socket.Writeln('SENT');
end;
end;
end.
我试图让它在Android设备上编译。我创建了一个新的多设备表单Unit2 (Unit2.pas and Unit2.fmx )
并将上述文件粘贴到Unit2.pas
中。
当我编译项目时,我收到错误
E1026 File not found Unit2.dfm
我是delphi编程的新手。我想知道什么是dfm
文件。它与fmx
文件有什么不同,这似乎是在我的IDE上创建表单的正确方法。我正在使用Embarcadero® Delphi 10 Seattle
答案 0 :(得分:4)
根据我在代码中看到的内容,您使用的是VCL Forms Application
,仅适用于Windows。但是你说你的目标是Android。这里有很多问题,所以我将从顶部开始。
E1026找不到文件Unit2.dfm
我的代码中没有看到Unit2
的任何引用。这里没有任何东西表明这样的文件甚至首先存在。您的上述单元为TCPServer.pas
,我在任何Unit2
子句中都看不到uses
。如果我不得不猜测,此单元最初名为Unit2.pas
,但您将单元顶部的名称修改为TCPServer
,而不指示项目名称更改。
我试图让它在Android设备上进行编译。
如果这是你的意图,你会走错路。您的上述单元适用于VCL
应用程序,但VCL
仅适用于Windows。它无法在任何移动平台上运行。
我想知道什么是dfm文件。它与fmx文件的区别如何
DFM
文件与VCL
应用程序绑定,这就是我知道您当前项目所针对的内容。 FMX
文件与Firemonkey应用程序绑定,这是您需要以多平台为目标的应用程序。如果您要定位移动平台,则无法在同一应用程序中将两者混合在一起。 DFM
和FMX
都是包含表单设计的文件(与代码相对),并且它们在两个框架之间有所不同。
我是delphi编程的新手。
我强烈建议您在尝试开始编码之前先退后一步阅读Delphi,特别是如果您要定位移动平台。
另一方面,您的单位在其使用条款中引用FMX
单位,但请查看{$R *.dfm}
行。这意味着它正在寻找DFM
文件。我不知道你是如何获得这些代码的,但这是一个巨大的混淆,无法在任何一个框架下编译。