|
제가 질문을 모두 이해를 못하겠네요.
그냥 이해한 범위에서만 답변을 하겠습니다.
1. 빌더의 경우 Form Designer를 이용하여 design한 component의 경우에는
Form을 생성하면 자동으로 함께 생성이 됩니다.
(class 정의에서 __published 항목에 있는 component들)
2. TThread에서 파생되는 클래스는 단지 설계서입니다.
그걸 이용해서 실제 instance를 만들어서 사용하면 쓰레스를 여러개
구동할 수가 있습니다.
쓰레드의 현재 process의 메모리 공간을 공유하기 때문에 같은 heap영역을
사용하게 되고, 동적메모리를 할당받아 사용할 수 있습니다.
3. 일단 코드에서 좀 이상한 부분입니다.
빌더에서 MDI의 경우에
TSetupFrm *setup=new TSetupFrm(this);에서
this 대신에 Application을 사용합니다.
Project메뉴의 Options->Forms에 보면 Auto-create Form과 Available Form이 있습니다.
거기에 보면 TSetupFrm이 Auto에 있으면 그건 SetupFrm.h에 보면
extern TSetupFrm *SetupFrm;
정도로 나와있을 것이고, 이미 자동으로 폼이 하나 만들어져 있는 상태입니다.
그냥 SetupFrm을 호출해서 사용하면 되는 것이고,
이 폼이 MDI에서처럼 여러 개가 사용되어야 한다면 Available Form으로 옮겨놓고,
코드 내에서 new로 생성을 해서 사용해야 합니다.
밑에 있는 소스만 가지고는 정확한 문제점이 파악이 안되네요.
죄송합니다.
악동 님이 쓰신 글 :
: VC++와는 너무 다른가 보네요.
: 질문이 좀 난잡합니다. T.T
: 이해해 주세요....
:
: 1. 변수 선언시... 예를들면 말이죠... 아래처럼
: TButton *Button2;
: 이럴경우 Button2라는 변수를 사용하기 위해서는 new 연산자로
: 메모리를 할당해 주어야 하는것 아닌가요?
: 그리고 메로리를 할당 받을 때 Contructor가 호출되는 것이 아닌지요.
: DEBUGGING 을 해보니 변수 선언시에 Constructor가 호출되는 것 같아서요.
:
: 2. Thread 사용시의 동적 메모리 사용에 관하여.
: Thread Class 재정의 시에 만들어서 사용하는 각종 함수의 내부에서
: 동적 메모리의 생성은 금지 되어 있는건지요?
:
: 3. 아래 제가 올린 코드에서 에러가 납니다.
: 설명에서처럼 첫번째 실행에서는 에러가 나질 않는데,
: 같은 함수를 다시 사용했을 경우, 엉뚱한 다른 변수의 내용이 바뀝니다.
: 이줄이 실행되면서 메모리 바뀜
:
: ----->TSetupFrm *setup=new TSetupFrm(this);
:
: 답변 주심 정말로 정말로 감사하겠습니다.
:
: --- 빌더 포기의 위기에 휩싸인 악동 ---
:
:
: ###########MainFrm.h################################
:
: class TMainFrm : public TForm
: {
: __published:
: TButton *Button2;
: TButton *Button7;
:
: void __fastcall Button2Click(TObject *Sender);
: void __fastcall Button7Click(TObject *Sender);
:
: public:
: __fastcall TMainFrm(TComponent* Owner);
: MainRun *run; <----------------- 이 메모리가 변경됨
: };
:
:
: ###########MainFrm.cpp################################
: void __fastcall TMainFrm::Button7Click(TObject *Sender)
: {
: if(run==NULL) {
: run=new MainRun; ---->많은 동적 메모리를 형성합니다.(new 연산자 사용)
: run->InitModule();
: }
: }
:
: void __fastcall TMainFrm::Button2Click(TObject *Sender) --->이 버튼을 눌러 실행시, 첫번째
: { 실행은 정상입니다. 두번째 실행
: TSetupFrm *setup=new TSetupFrm(this); 시 엉뚱하게도
: setup->ShowModal(); 위에 있는 run의 데이터가
: delete setup; 변경됩니다.
: }
:
:
: ##############SetupFrm.h################################
: __fastcall TSetupFrm::TSetupFrm(TComponent* Owner)
: : TForm(Owner)
: {
: member=NULL;
: }
: //---------------------------------------------------------------------------
:
: ##############SetupFrm.cpp################################
: void __fastcall TSetupFrm::FormCreate(TObject *Sender)
: {
: if(member==NULL){
: member=new OTDSConfig; ---->이 변수는 Form Close시 delete됩니다.
: }
:
: if(MainFrm->run!=NULL ) {
: member=(OTDSConfig *)(MainFrm->run->data);
: }
: else
: {
: if(!member->ReadConfig() ) member->SetDefault(member->nDataLen);
: }
:
: refresh();
: }
|