Q&A

  • dll 을 만들때에는 dll 에 클래스나 전역변수같은 것들은..
이용할수 없는거예여?

dll 에서 클래스를 사용해서 호출한다던가..
아니면 변수를 정의해서 사용하거나.. 그럴순 없는건지요...?
있다면. 간단한 예제좀 ㅡㅜ

책에서는 못본거 같아서요 ㅡㅜ
3  COMMENTS
  • Profile
    KDDG_Apine 2004.06.09 05:28
    어떤 것을 질문 하시는지 잘 모르겠습니다..

    DLL도 EXE와 똑같이 클래스와 전역변수 모두 사용 가능합니다...  단지 DLL 로 되어 있다는 것 뿐이죠  

    좀더 자세히 질문해 주세요.

  • Profile
    이종석 2004.06.09 18:13
    답변 감사합ㄴ다..
    제가 아직 실력이 바닥을 기고 있어서 ㅡㅜ
    죄송합니다 ㅡㅜ

    --- Dll 소스 ---------------------------------------------

    library Project2;


    uses
      SysUtils,
      Classes;

    //--- 쿨래수 정의 ----//
    type TestClass = class(TObject)

      private
      protected
      public
        function returnStr() : String;

    end;
    //--------------------//

    {$R *.res}

    function TestClass.returnStr():String;
    begin
      result := '쓰뎅';
    end;

    function CallObject() : TObject; stdCall;
    begin
      result := TestClass.Create;
    end;
      

    exports
      CallObject index 1;
    begin
    end.


    -- 불러 오는쪽 -------------------------------------------------------

    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;

    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation
    function CallObject() : TObject; stdCall;external 'Project2.dll'



    {$R *.dfm}

    procedure TForm1.FormCreate(Sender: TObject);
    var
      Test : TOBject;
    begin
      Test := CallObject(); // <-- 호출이 됩니다 +ㅁ+;;
    end;

    end.


    TObject 터입으로 객체를 받아버리기 때문에
    TestClass 객체의 맴버인 function returnStr() : String;
    에 접근이 안되자나요 ㅡㅜ

    Class 케스팅을 해야하는데
    그럴려면 Unit 에 TestClass 라는 클래스의 뼈대가 있어야 하구

    케스팅 안하고 쓸수 있는 방법이 있나요 ㅡㅜ?

    초보자의 질문입니다 ㅡㅜ



  • Profile
    이중철 2004.06.10 02:14
    메인 App의 Heap주소와 DLL의 Heap주소가 틀려서
    (제가 알고 있는것이 맞는지 사실 저도 모름 컥!)
    전혀 되지 않습니다.

    DLL에서 생성된 클래스는 메인에서 사용불가 이고
    또한 String, Dynamic Array등도 안됩니다.
    그리고 음 이것저것 안되다고 보면 타당 컥!

    델파이에 보면 BORLNDMM.DLL(정확히 스펠링 모름) 사용하면
    어느정도 가능하다고 합니다.(전 될 수 있으면 사용 안함)
    그래도 BORLNDMM.DLL이란것을 사용하기에는 왠지 싫죠

    메인프로그램이 델파이로 된 것이고 단지 DLL로 모듈화 하여
    쪼갤생각으로 DLL을 만드신다면 BPL을 고려해보세요.
    BPL은 위의 요구사항을 모두 만족시킵니다.
    ^^어차피 델파이 라이브러리는 모두 이것으로 되어 있으니 ㅋㅋ