Q&A

  • MDIChild 폼을 DLL로 만들긴 했는데....
도움에 감사드립니다.

책을 뒤져가며, 게시판을 훑어가며
차일드 폼을 dll로 만들어 메인폼에서 부르는데까지는
성공했는데요. 그다음이 문제네요.

하고자 하는 일을 간단하게 변경해서 질문 드릴께요.

DLL을 부르는 실행파일안에는 Form_Main 폼이있고요,
DLL안에는 Form_SearchTip 폼이 있습니다.

하고자 하는 일은 DLL을 부르면 DLL의 폼이 생성되면서 Form_Main의 caption을 '하하하'로 바꿀려고 하는 것인데 여기서 에러가 생기네요.
어떻게 해야 하나요?

<소스 일부>

1. Form_Main
    ............
  LibHandle := LoadLibrary('searchtipdll.dll');
  if LibHandle = 0 then Exit;
   ........
   Show_Form(Form_Main) //DLL에 있는 Show_Form을 Call

2. DLL
  uses Form_Library
  .............
  procedure Show_Form(Form:TForm);
   begin
       Form_SearchTip := TForm_SearchTip.Create(Form);
       Form_SearchTip.Show;
   end;

   procedure TForm_SearchTip.FormCreate(Sender: TObject);
   begin
       Form_main.Caption := 'hhhhhh'; //실행중에 에러

{ 아래 방법을 해보았으나 컴파일 에러....
  Hwnd := FindWindow('Form_Main', 'Form_Main');
    HWND.Form_Main.Caption := 'hahhaha';
}

  end;

end;


고수님 도와 주세요.

4  COMMENTS
  • Profile
    최용일 2002.01.11 22:28
    안녕하세요. 최용일입니다.

    실행파일과 dll은 서로 다른 프로세스로 실행됩니다. 그러니까 이 경우는 uses절에 유닛을 추가했다고 해도 아래와 같이 바로 바꿀수는 없을겁니다.

           Form_main.Caption := 'hhhhhh'; //실행중에 에러

    보니까 dll함수 호출할때 파라매터로 위 폼이 들어오군요.

    Form_SearchTip에 Form_main타입으로 필드나 속성을 하나 만들어서 그것을 억세스하세요...

    TForm_main=class(...)
        ......
    private
        fForm_main: TForm_main;
    end;

    procedure Show_Form(Form:TForm);
    begin
        Form_SearchTip := TForm_SearchTip.Create(Form);
        Form_SearchTip.fForm_main := Form;
        Form_SearchTip.Show;
    end;

    procedure TForm_SearchTip.FormCreate(Sender: TObject);
    begin
        fForm_main.Caption := 'hhhhhh';
    end;

    또 다른 방법으로 Form_SearchTip의 Owner가 Form_main이니까 형변환만 하셔두 되구요...

    procedure TForm_SearchTip.FormCreate(Sender: TObject);
    begin
        TForm_main(Self.Owner).Caption := 'hhhhhh';
    end;

    ^^ 항상 즐코하세요...

  • Profile
    장영철 2002.01.11 22:54
    님께서 적어주신 방법대로 캡션을 변경하는 것은
    문제 없이 되었으나 제가 예를 잘못 들어
    제가 고민하고 있는 문제를 풀지 못했어요

    조금전에 고맙습니다라고 글을 쓰고선
    이건 어떻게 되요라고 다시 글을 써 죄송합니다.
    무식한 놈이다 생각하고 이해해 주세요.

    하고자 하는 것은 사실 Form_Main에 있는 콤보박스의
    내용을 변경하는 것입니다. 다시 예를 정확히 적을께요.

    DLL을 부르는 실행파일안에는 Form_Main과 공통된
    루틴만 모아놓은 Form_Library 폼이 있습니다.
    DLL안에는 Form_SearchTip 폼이 있고요.

    실행프로그램(Form_Main)이 Form_SearchTip(DLL)을 부르면
    Form_library에 있는 어떤 procedure가 실행되는데 이 프로시져가
    Form_Main의 ComboBox를 수정하도록 하고 싶습니다.

    그래서 Form_Library안에서 다음과 같이 루틴을 만들었는데..
    여전히 에러이네요.


    1. Form_Library

    Procedure TForm_Library.InsertText;
    var Hwnd:THANDLE;
    begin
       Hwnd := FindWindow(PChar('TForm_Main'), NiL);
       TForm_Main(HWND).ComboBox_Windows.Items.Add('hahaha');
    end;

    어떻게 해야 될까요? DLL을 콜하는 것은 아까 말씀드린
    방식과 같습니다. 단 DLL이 생성되면서 Form_Library안에 있는
    InsertText 프로시져를 수행하는 것이 다릅니다.

    번거럽게해서 죄송합니다.


    =========================================


    매우 고맙습니다.
    알려주신 것을 참조해서 즐코 해 볼께요..



  • Profile
    최용일 2002.01.12 02:50
    똑같은 방식으로 하면 되지 않나요? 파라매터나 필드로 Form_Main객체를 넘겨주시면 되죠...

    뭐 별로 다를것은 없을거 같은데 복잡하게 생각하시는 거 같네요...

    그리고 객체와 핸들은 전혀 다릅니다.
    위와 같이 핸들을 객체로 형변환해서 쓰시면 안되죠. 핸들(윈도우핸들)은 각각의 윈도우들을 식별하기 위해서 사용하는 고유한 키입니다. 4바이트짜리 정수형이구요...

    콤보박스에 아이템추가하는 거야 님이 하시려고 했던것처럼 폼핸들구한뒤에 거기에서 또 콤보박스의 핸들을 구하고 API함수를 쓰면 되지만 그 폼에 님이 새로 추가한 메소드를 호출한다거나 할때는 핸들만 가지고는 방법이 없습니다.

    그러니까 처음에 제가 답변했던거 다시한번 음미해보시구 객체를 통째로 넘겨주는 방식으로 바꾸어보세요...

    ^^ 항상 즐코하세요...

  • Profile
    장영철 2002.01.12 03:30
    답변 고맙습니다.

    한번 고생좀 해 보겠습니다.
    아직 델파이 문법이 약해 다양한 경우를
    해보지 못하지만 즐코 해 보겠습니다.

    수고하세요.


    • 나옹이
    • 2002.01.11 23:02
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 박상윤
      2002.01.12 01:03
      TWain 드라이버를 사용하셔서 이미지를 받으시면 됩니다. Twain은 스케너 , 디치털 카메라 등에서 사용합...
    • 나옹이
      2002.01.12 02:11
      Twain 드라이버는 .. 따로 설치를 해야 하는건가요? 자료실에 보면.. 정욱님께서 올려주신 MultiDe...
    • 오은경
    • 2002.01.11 22:50
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 블랙썬
    • 2002.01.11 22:44
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이희정
      2002.01.12 00:10
      mdb파일의 위치가 임의로 변할 수 있다면 문제가 되지만 프로그램 설치시나 기타 사용자가 정하는 ...
    • 장영철
    • 2002.01.11 21:13
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.01.11 22:28
      안녕하세요. 최용일입니다. 실행파일과 dll은 서로 다른 프로세스로 실행됩니다. 그러니까 이 경우는 us...
    • 장영철
      2002.01.11 22:54
      님께서 적어주신 방법대로 캡션을 변경하는 것은 문제 없이 되었으나 제가 예를 잘못 들어 제가 고민하고...
    • 최용일
      2002.01.12 02:50
      똑같은 방식으로 하면 되지 않나요? 파라매터나 필드로 Form_Main객체를 넘겨주시면 되죠... 뭐 별로 다...
    • 장영철
      2002.01.12 03:30
      답변 고맙습니다. 한번 고생좀 해 보겠습니다. 아직 델파이 문법이 약해 다양한 경우를 해보지 못하...
    • 오진욱
    • 2002.01.11 20:30
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 전민식
    • 2002.01.11 20:21
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.01.11 22:17
      안녕하세요. 최용일입니다. 레지스트리에 아래와 같은 형식으로 값들을 써주시면 됩니다. [HKEY_CLAS...
    • 전민식
      2002.01.14 20:44
      최용일님 덕분에 해결 되었습니다.. 넘 감사 합니다...
    • 아폴론
    • 2002.01.11 19:58
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 윤수아
      2002.01.11 20:46
      P_qr 가 nil일 경우를 체크 해주셔야 할 것 같네요
    • 아폴론
      2002.01.12 00:12
      A폼에서 Fm206rpt폼의 콤포넌트를 찾는건데 폼이 다르면 아래의 구문으로는 안되나요? P_qr이 nil일 경...
    • 최용일
      2002.01.12 03:01
      안녕하세요. 최용일입니다. Self는 자기 자신을 가리킵니다. 그러니까 Self.FindComponent를 하시면 ...
    • 아폴론
      2002.01.12 04:04
      with Fm206rpt do begin      for i := 48 to 59 do begin    &nb...
    • 박철식
    • 2002.01.11 17:32
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김선일
      2002.01.11 18:56
      ^^;; 왜 굳이 Memo Type을 String으로 바꾸시려 하시는지... Table에서는 String Type이면 255자가...
    • 김황중
    • 2002.01.11 17:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 정해영
      2002.01.11 18:19
      프린트 포트랑 시리얼 포트 방식이 다르군요... 큰 도움이 될것 같습니다. 우선 컴포넌트를 구해야 겠네...
    • 김기수
      2002.01.11 18:21
      단축키까지는 모르겠지만 폼위의 컴포넌트들의 미세조정은 Ctrl 키와 화살표를 사용하시면 가능하구요, ...
    • 최경습
    • 2002.01.11 07:57
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 술친구
      2002.01.11 20:06
      비밀번호 틀렸을때 한줄이 빠진듯한데여..          &nb...
    • 최경습
      2002.01.11 23:29
      감사합니다. 이렇게 답변을 해주시니. 근데. 이렇게 했는데두. 안되는데..어찌된 일인지. 제가 잘...
    • 이정관
      2002.01.11 21:05
      com port를 사용해서 텍스트를 쓰거나 읽기 위해서는 Com Port를 핸들링할수 있는 컴포넌트가 있어야하구요...
    • 델파이탐크루즈
      2002.01.11 05:22
      이런 답변 쓰기 쑥스럽네여...  ^^; 하지만 모른다니까.. 헤헤.. 하지만 용기를 내어 .... ...
    • 손병욱
      2002.01.11 05:45
      우선 알려 줘서 고맙습니다. 한가지 묻고 싶은데요 질문에도 종류가 있나요?.. ^^: 그럼..
    • 델파이탐크루즈
      2002.01.11 19:47
      꼭 그런건 아니지만 이런질문은 책만 보면 나오는 것이거든요... 모르는건 물어보는것은 잘못된것이 아...
    • 백치미
    • 2002.01.11 04:23
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이경열
      2002.01.11 08:31
      with Query do begin    close;    sql.Clear;    sql.Add('select 코...
    • sonny
    • 2002.01.11 04:14
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이정관
      2002.01.11 04:09
      특정필드값에 NULL를 삽입시에는  update table_t set t_date = null하셔야 하구요 strtodat(ed...
    • 이경열
      2002.01.11 08:39
      edit1.text := ''; 꼭 날짜 형식으로 저장 하셔야 하나염? 음..그게 아니라면...그냥... 에디트가 널이...