Q&A

  • DLL에서 TImage 생성
안녕하세요.

VC++에서의 Delphi DLL 사용을 위한 예제를 만들고 있습니다.

목적은 Delphi의 Component를 사용한 DLL이 VC++에서 정상적으로 동작할 수 있는가를 알아 보기 위한 것입니다.

DLL에서는 CreateViewer(???), LoadImage(PChar path)만 적용을 할 것이고 컴포넌트는 TImage를 사용하려고 합니다.

CreateViewer()가 호출되면 TImage가 생성되고 VC++에서 지정한 일정 영역을 TImage의 영역으로 할당하려고 합니다.

LoagImage(PChar path)는 영상파일을 읽어 오는 것이고요. BMP파일만 읽어 올 겁니다.

문제는

1. TImage컴포넌트를 어떻게 생성을 해야 하는지 모르겠습니다.

2. 그리고 TImage를 Create할 때 소유자는 어떻게 지정해야 하는지도 모르겠습니다.

좋은 하루 되세요.
2  COMMENTS
  • Profile
    손희석 2004.01.04 02:48

    DLL내의 CreateViewer 안에서 호출되는 함수에서 다음과 같이 하면 되지 않을까 싶습니다.

      a := TImage.Create(nil); //이부분에 nil이 들어가는
                                         //파라메터는 소유자를 넣는 경우이기 때문에
                                         //님이 쓰실려는 코드에는 지정하지 않습니다.
                                         //그래서 nil로 지정하여 생성하시면 됩니다.
      a.Picture.LoadFromFile(String(path));

    이상 도움이 되셨으면 하는데 ^^

    즐프되세요..
  • Profile
    이병돈 2004.01.05 20:09
    간단히 제가 작성한 코드를 올려보겠습니다.

    [[[ 델파이 작성부 ]]]
    procedure CreateViewer(hApp: THandle; x, y, w, h: Integer); cdecl;
    begin
      Application.Handle := hApp;

      img := TImage.Create(Application);
      Windows.SetParent(GetParent(hApp), hApp);
      img.Left := x;
      img.Top := y;
      img.Width := w;
      img.Height := h;
      img.AutoSize := FALSE;
      img.Center := TRUE;
      img.Stretch := TRUE;
    end;

    procedure OpenDlg(hApp: THandle); cdecl;
    var
      dlg: TOpenPictureDialog;
    begin
      Application.Handle := hApp;
      dlg := TOpenPictureDialog.Create(Application);

      if (dlg.Execute) then begin
        img.Picture.LoadFromFile(dlg.FileName);
      end;
    end;

    [[[ VC++ 작성부 ]]]
    void CTestFormDlg::OnBtnOpen()
    {
            // TODO: Add your control notification handler code here
            CreateViewer(AfxGetMainWnd()->m_hWnd, 0, 0, 300, 300);

            OpenDlg(AfxGetMainWnd()->m_hWnd);
    }

    물론 DLL사용 가능하도록 모든 설정은 되어 있는 상태입니다.