|
제안입니다.
아마도 원하는 기능이 DLL을 이용해서 폼을 하나 생성하고
타이머로 그 폼에 계속 새로운 값을 갱신하는 기능이라고 여겨지는데요....
그러려면
1. 메인의 FormCreate 같은 초기화 함수에서 DLL을 load해서 필요한 함수의 포인터를
세팅해 놓습니다.
그리고 또한 DLL의 필요한 함수를 호출해서 폼을 생성해 놓습니다.
2. 타이머 루틴에서는 DLL로 만든 폼의 값을 갱신할 수 있는 DLL의 함수를 호출합니다.
즉, DLL 내에서도 폼을 생성하는 함수와, 폼의 값을 갱신하는 함수를 따로따로
만드는 것입니다.
참고하세요...
고영문 님이 쓰신 글 :
: ㅜ.ㅜ
: 며칠 전에 올렸는데 답변이 없어 다시 올려봅니다. 혹시 아래 코드를 보시고 더 많은 설명이
: 필요하시다면 답글 붙여 주세요.
:
: 메인창에서 dll의 함수를 호출하고 데이터를 다시 dll로 넘겨서 dll의 Edit창에 표시를 하려고 하거든요. 그런데 코드를 보시면 아시겠지만 timer에 의해 일정시간마다 dll을 호출합니다. 그런데 한번 호출하고 Close()가 있는데도 dll폼을 닫지 않고 계속해서 생성이 되네요. 제가 알고 싶은건
:
: 1. 왜 Close()가 먹히질 않는가??
: 2. 어떻게 하면 dll폼을 한번만 띄워놓고 거기에 계속 데이터를 넘겨받아 표시할수 있는가??
:
: 입니다.
:
: 현재 코드입니다.
: //main------------------------------------------------------
: void __fastcall TSampleForm::Timer1Timer(TObject *Sender)
: {
: Edit1->Text = Data;
:
: typedef void (__stdcall *IMPPROC) (int);
: HINSTANCE DllInstance;
: IMPPROC ImpFunc;
:
: DllInstance = LoadLibrary("About.dll");
: ImpFunc = (IMPPROC) GetProcAddress(DllInstance, "_InvokeAboutDialog");
: ImpFunc(Data);
: FreeLibrary(DllInstance);
:
: Data++;
: if (Data >=100)
: Data = 0;
: }
:
: //Aboutdll-----------------------------------------------------------------------------
: void InvokeAboutDialog(int mainData)
: {
:
: AnsiString a;
: a.sprintf("%d",mainData);
:
: TAboutForm *AboutDlg = new TAboutForm(NULL);
: AboutDlg->AboutEdit->Text = a;
: AboutDlg->ShowModal();
:
: AboutDlg->Close(); <----바로 이부분이 안먹히는거 같아요ㅠ.ㅠ
: delete AboutDlg;
: }
|