|
call_CreateMmcForm 이 무슨 형인지 불명확하지만 맞다 치고,
CreateMimicForm, Mimics 도 오타라고 치고,
동일하게 작성해서 테스트해 봤는데, 잘되네요;;
그런데 만약, CreateMmcForm 을 여러번 호출해서 폼을 여러개 띄우고,
CloseMmcForm 을 호출해서 닫으려고 하면, 마지막에 띄운 하나만 닫히는게 정상입니다.
그런데 질문이 갑자기 헷갈리는데요;;
만드려고 하는 시점에 두 개가 만들어진다는 건지,
닫히지가 않는다는건지 모르것네요.
또 실행파일 종료시에 남아 있다는건..
해당 프로그램의 Main이 되는 Form을 닫아서 프로그램을 종료했는데도,
바탕화면에 Form이 남아 있다는 건가요?
funji 님이 쓰신 글 :
: <Main.cpp>
: void __fastcall TfmMain::CreateMmcDisplay()
: {
: Mmc = LoadLibraryA("MimicDgm.dll");
: if (!Mmc)
: {
: ShowMessage("MmcDgm.dll not loaded");
: }
: else
: {
: call_CreateMmcForm CreateMmcForm;
: CreateMmcForm= (call_CreateMmcForm)GetProcAddress(Mimics, "CreateMmcForm");
: CreateMimicForm(fmMain->pnlMmc_M1->Handle, Application->Handle);
: }
: }
: //----------------------------------------------------------------------------------------
: <Mmc.DLL>
: void __stdcall CreateMmcForm(HWND hPnl, HWND HApp)
: {
: Application->Handle = HApp;
:
: //exe 생성 후 붙이기
: sPath = ExtractFilePath(Application->ExeName);
:
: FormMmc = new TFormMmc(0);
:
: SetParent(FormMmc->Handle, hPnl);
:
: FormMmc->Show(); <<============요때 폼이 하나가 뜹니다.
: }
: //---------------------------------------------------------
: void __stdcall CloseMmcForm()
: {
: if (FormMmc)
: {
: FreeMmcDiagram();
: FormMmc->Close();
: }
: }
:
: FreeMmcDiagram() 이 아이는 지금 주석으로 막아놔서 함수안에서 수행하는 부분은 없습니다ㅠㅠㅠ
:
: void __stdcall FreeMmcDiagram()
: {
: for (int i=0; i < 1 ; i++)
: {
: //delete Mmc[i];
: //FreeAndNil(Mmc[i]);
: }
: }
:
:
:
:
:
: 빌더초보 님이 쓰신 글 :
: : 소스 내용만으론 Form 이 두개 뜨지 않을것 같은데...
: :
: : CreateMmcForm을 두 번 호출하거나
: : dll의 다른 함수에서 TFormMmc 의 생성자를 호출하거나 하는 상황인걸로 예상 됩니다.
: :
: : 어느 시점에 어떻게 dll 의 함수를 호출하는지 알아야 될 것 같네요.
: :
: : FreeMmcDiagram() 함수 내용도요.
: :
: :
: :
: :
: : funji 님이 쓰신 글 :
: : : Q&A게시판에서 DLL에서 폼을 생성후에 실행파일을 통해
: : : 폼을부러오는 게시물을 활용하여 소스를 짜보았습니다.
: : : 저는 DLL에서 폼을 생성후에 실행파일에 panel위에 올리려고하는데..
: : : 프로그램을 실행을시키면 폼이 두개 생성을 하게 되더라구요..ㅠㅠㅠ
: : : <Mmc.DLL>
: : : void __stdcall CreateMmcForm(HWND hPnl, HWND HApp)
: : : {
: : : Application->Handle = HApp;
: : :
: : : //exe 생성 후 붙이기
: : : sPath = ExtractFilePath(Application->ExeName);
: : :
: : : FormMmc = new TFormMmc(0);
: : :
: : : SetParent(FormMmc->Handle, hPnl);
: : :
: : : FormMmc->Show(); <<============요때 폼이 하나가 뜹니다.
: : : }
: : : //---------------------------------------------------------
: : : void __stdcall CloseMmcForm()
: : : {
: : : if (FormMmc)
: : : {
: : : FreeMmcDiagram();
: : : FormMmc->Close();
: : : }
: : : }
: : : FormMmc->Show(); 폼이 뜨길래
: : :
: : : 실행 파일 프로그램 종료시에 FormMmc->Close(); 이 부분을 적었는데도 남아있더라구여...
: : : 그런데 더 희안한것은 실행파일에 panel위에 FormMmc이 올라오기는 합니다.
: : : 이 정체 불명한 폼 제가 어디서 잘못 접근을 한건지 전혀 알수가 없네요ㅠㅠㅠㅠ
: : : 도와주세여ㅠㅠㅠㅠ
|