Q&A

  • [질문] DLL 사용시 메인폼 객체 참조 문제
dll을 만들어서 메인폼에서 호출하는 형식의 프로그램을 개발하려고 하는데요

메인폼과 dll이 별개의 프로젝트이다 구성되다 보니 서로 간의

use절로 참조할수는 없드라구요

메인폼의 사용권한 같은 것을 지정하는 변수를 참조할수도 없고

메인폼의 디비연결 객체를 참조해서 쓸수가 없드라구요.

그렇다고 각각의 dll마다 예를 들어 db연결관련 컴포넌트를 주거나 하는 일은

비효율적인거 같아서요

이 문제는 어떻게 해결해야 하는지요?

고수분들의 가르침 부탁드려요

1  COMMENTS
  • Profile
    홍성락 2010.08.26 20:25
    많은 방법들도 있겠지만 저같은경우는
    1번은 DLL 로드후 초기화하는 함수 또는 기능호출함수에 메인폼의 파라미터로 넘겨서 DLL에선 직접 찾아서 하는 방식으로 했었습니다.

    - DLL함수 호출시 TForm인자를 같이 넘겨줌
    procedure Myhello (SMainApplication : Forms.TApplication; SMainForm : TForm);
    - 그리고 DLL에서 Main 컴포넌트를 찾는건 FindComponent 사용했습니다
    TLabel(SMainForm.FindComponent('Label_Hello')).Caption := 'hello. MainForm';


    2번은 메인폼에 안보이는 패널하나 놓구요, 거기에 DLL의 컴포넌트를 덮는겁니다(프로그램 닫을때 리소스 에러 잘 수정하세요, 원복과 삭제)

    - 메인폼에 안보이는 패널하나 만들거나 DLL의 것을 올릴 컴포넌트하나 만듭니다
    - DLL에서 올릴 폼에 전체적인 패널을 생성후 기존 모든 컴포를 그 패널에 올립니다
    - 즉, DLL폼이 메인폼의 바탕에가는게 아니라 (mdichild 가 아닙니다, Parent 종속/상속)
    DLL의 패널의 부모(Parent)가 DLL폼에서 메인 폼의 패널로 바꾸는겁니다. 이때 빈 껍데기인 DLL폼은 닫지말고 안보이게하세요.
    잘 수정하세요, 부모 바꾸기와 리소스 에러등....