MAIN
<!--CodeS-->
unit fMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
Tarr = record
I: integer;
S: string;
R: Real;
end;
PTarr = ^Tarr;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
DL,UL: Tarr;
public
end;
var
Form1: TForm1;
implementation
uses Thds;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
DL.I := 10;
DL.S := 'h';
DL.R := 6.23;
TDownThds.Create(DL);
end;
<!--CodeE-->
스레드생성 pas
<!--CodeS-->
unit Thds;
interface
uses
Classes, Dialogs, SysUtils;
type
Tarr = record
I: integer;
S: string;
R: Real;
end;
PTarr = ^Tarr;
TThds = class(TThread)
private
FTarr: PTarr;
protected
procedure Execute; override;
public
constructor Create(var rec: Tarr);
end;
{TDownThds}
TDownThds = class(TThds)
end;
{TUpThds}
TUpThds = class(TThds)
end;
implementation
procedure TThds.Execute;
begin
ShowMessage(IntToStr(FTarr^.I));
ShowMessage(FTarr^.S);
ShowMessage(FloatToStr(FTarr^.R));
end;
constructor TThds.Create(var rec: Tarr);
begin
FTarr := @rec;
FreeOnTerminate := True;
inherited Create(False);
end;
end.
<!--CodeE-->
윗출.. MAIN의 TDownThds.Create(DL);에서
[Error] fMain.pas(49): Types of actual and formal var parameters must be identical
이란 에러가 생기네요~~
fMain 유닛에 있는 Tarr형과 Thds 유닛에 있는 Tarr형은 데이터 구조는 같지만 전혀 별개의 데이터 형입니다.
사람의 눈으로는 똑같은 데이터형이겠지만 컴파일러 입장에서는 fMain.Tarr형과 Thds.Tarr형으로 서로 다르게 해석하죠.
둘중의 한군데 유닛에서만 선언하고 uses절로 참조해서 쓰세요. 아님 데이터형만 따로 유닛으로 빼서 만들어 쓰시던가요...
^^ 항상 즐코하세요...