자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
uses절에 포함된 유닛의 타입을 가져다 쓰려면 어떻게 해야 하나요?
2019.09.16 16:53
델파이 XE5를사용하고 있는데 하기의 uses절에 명시한 소스파일의 type 내용을
프로그램에서 재 정의하면 에러가 뜹니다.
unit Unit1;
interface
uses
Gurux.DLMS.Command;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type TComd = class (TCommand in 'Gurux.DLMS.Command.pas')
end;
컴파일시 상기 type TComd = class (TCommand in 'Gurux.DLMS.Command.pas') 에서
E2021 Class type required라는 오류가 뜹니다.
uses 에 명시한 'Gurux.DLMS.Command.pas' 에서 선언된 TCommand 클래스를 가져다 쓸려면 어떻게 해야 할지요?
감사합니다.
댓글 3
-
험프리
2019.09.17 09:20
-
한태수
2019.09.17 09:38
험프리님의 답변에 감사드립니다.
type
TComd = class (TCommand)
end;
설정시 [dcc32 Error] E2021 class type required 가 오류가 발생하며
type
TComd = class (Command.TCommand)
end;
설정시 [dcc32 Error] : E2003 Undeclared identifier: 'Command' 라는 오류 메시지가 뜹니다.
Command라는 타입은 폼에 버튼만 생성시 하기와 같은 uses 소스 파일들이 자동 생성되고 링크되어 command 타입이 다른곳에서 사용되는것 같습니다.
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Gurux.DLMS.Command;
이를 어떻게 해결해야 될지 고수님의 조언 부탁드립니다.
감사합니다.
한 태수 드림.
-
한태수
2019.09.17 10:56
델파이 7 과 델파이 XE5에서 Uses 절에 명시된 소스에 명시된 클래스를 사용자 소스에서 해당 클래스의 객체 생성은 계속 에러가 나서 Class of Type ( Metaclass ) 같이 하여 문제를 해결하였습니다.
Commd = class of Gurux.DLMS.Command.TCommand;
Metaclass에 대한 문법을 적어서 공유합니다.
감사합니다.
한 태수 드림.
클래스 참조
클래스의 인스턴스인 객체가 아닌 클래스 자체에서 작업이 실행되는 경우가 종종 있습니다.
예를 들어, 클래스 참조를 사용하여 생성자 메소드를 호출할 때 이런 경우가 발생합니다. 클
래스 이름을 사용하면 항상 특정 클래스를 참조할 수 있지만 클래스를 값으로 갖는 변수나
파라미터를 선언해야 하는 경우에는 클래스 참조 타입이 필요합니다.
클래스 참조 타입
클래스 참조 타입(class-reference type)은 종종 메타클래스(metaclass)라고도 불리며, 그
문법은 다음과 같습니다.
여기서 type은 임의의 클래스 타입입니다. type 식별자 자체는 타입이 class of type인 값을
나타냅니다.
uses절에 포함된 유닛의 타입을 가져다 쓰려면 어떻게 해야 하나요?
2019.09.16 16:53
델파이 XE5를사용하고 있는데 하기의 uses절에 명시한 소스파일의 type 내용을
프로그램에서 재 정의하면 에러가 뜹니다.
unit Unit1;
interface
uses
Gurux.DLMS.Command;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type TComd = class (TCommand in 'Gurux.DLMS.Command.pas')
end;
컴파일시 상기 type TComd = class (TCommand in 'Gurux.DLMS.Command.pas') 에서
E2021 Class type required라는 오류가 뜹니다.
uses 에 명시한 'Gurux.DLMS.Command.pas' 에서 선언된 TCommand 클래스를 가져다 쓸려면 어떻게 해야 할지요?
감사합니다.
댓글 3
-
험프리
2019.09.17 09:20
-
한태수
2019.09.17 09:38
험프리님의 답변에 감사드립니다.
type
TComd = class (TCommand)
end;
설정시 [dcc32 Error] E2021 class type required 가 오류가 발생하며
type
TComd = class (Command.TCommand)
end;
설정시 [dcc32 Error] : E2003 Undeclared identifier: 'Command' 라는 오류 메시지가 뜹니다.
Command라는 타입은 폼에 버튼만 생성시 하기와 같은 uses 소스 파일들이 자동 생성되고 링크되어 command 타입이 다른곳에서 사용되는것 같습니다.
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Gurux.DLMS.Command;이를 어떻게 해결해야 될지 고수님의 조언 부탁드립니다.
감사합니다.
한 태수 드림.
-
한태수
2019.09.17 10:56
델파이 7 과 델파이 XE5에서 Uses 절에 명시된 소스에 명시된 클래스를 사용자 소스에서 해당 클래스의 객체 생성은 계속 에러가 나서 Class of Type ( Metaclass ) 같이 하여 문제를 해결하였습니다.
Commd = class of Gurux.DLMS.Command.TCommand;
Metaclass에 대한 문법을 적어서 공유합니다.
감사합니다.
한 태수 드림.
클래스 참조클래스의 인스턴스인 객체가 아닌 클래스 자체에서 작업이 실행되는 경우가 종종 있습니다.예를 들어, 클래스 참조를 사용하여 생성자 메소드를 호출할 때 이런 경우가 발생합니다. 클래스 이름을 사용하면 항상 특정 클래스를 참조할 수 있지만 클래스를 값으로 갖는 변수나파라미터를 선언해야 하는 경우에는 클래스 참조 타입이 필요합니다.클래스 참조 타입클래스 참조 타입(class-reference type)은 종종 메타클래스(metaclass)라고도 불리며, 그문법은 다음과 같습니다.여기서 type은 임의의 클래스 타입입니다. type 식별자 자체는 타입이 class of type인 값을나타냅니다.
다음과 같이 작성하시기 바랍니다.
uses
Gurux.DLMS.Command;
type
TComd = class (TCommand)
end;
uses 절에 포함된 유닛에 선언된 클래스, 상수, 변수를 참조할 수 있습니다.
TCommand와 같이 클래스 타입만 지정하면 됩니다.
만약, TCommand가 여러 유닛에 선언되어 있다면, 유닛 이름(네임스페이스가 지정되어 있다면 마지막 이름)과 함께 클래스 타입을 지정할 수도 있습니다.
type
TComd = class (Command.TCommand)
end;
——————
답글이 도움이 되셨는지 다른 분들도 참고할 수 있도록 결과 댓글 부탁드립니다.
(결과 댓글이 없는 경우 다른 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)