Q&A

  • [도와주세요]DLL 사용시의 문제점....
db의 내용을 읽어서 exe 프로그램의 treeview에다가 db의 내용을 treeview형태

로 만들어 주는 모듈을 dll로 작성하였는데....



메인 프로그램(exe)에서 dll을 동적호출(loadlibrary)을 이용하여 해당 dll

의 함수를 call하고 있습니다..

dll내의 함수원형은 Procedure libmenu_loadmenu(treeview1: TTreeview); stdcall; 이렇게 선언되어 있구요....



메인 프로그램에서는 libmenu_loadmene(treeviewMenu);요렇게 호출을 합니다.



근데.. 정상적으로 동작을 하는데...

loading된 dll을 FreeLibary로 해제하면 access violation Error가 발생을

하는데..... 도무지 이유를 모르것네요....

그래서 dll내의 함수를 Procedure libmenu_loadmenu(VAr treeview1: TTreeview); stdcall;로 바꾸어 봐돠 access violation Error가 발생을 하고

정정인 DLL 함수호출을 사용하면 전혀 문제가 없는데......



전문가님의 도움을 기다립니다...

1  COMMENTS
  • Profile
    1999.05.14 21:25
    왕초보 wrote:

    > db의 내용을 읽어서 exe 프로그램의 treeview에다가 db의 내용을 treeview형태

    > 로 만들어 주는 모듈을 dll로 작성하였는데....

    >

    > 메인 프로그램(exe)에서 dll을 동적호출(loadlibrary)을 이용하여 해당 dll

    > 의 함수를 call하고 있습니다..

    > dll내의 함수원형은 Procedure libmenu_loadmenu(treeview1: TTreeview); stdcall; 이렇게 선언되어 있구요....

    >

    > 메인 프로그램에서는 libmenu_loadmene(treeviewMenu);요렇게 호출을 합니다.

    >

    > 근데.. 정상적으로 동작을 하는데...

    > loading된 dll을 FreeLibary로 해제하면 access violation Error가 발생을

    > 하는데..... 도무지 이유를 모르것네요....

    > 그래서 dll내의 함수를 Procedure libmenu_loadmenu(VAr treeview1: TTreeview); stdcall;로 바꾸어 봐돠 access violation Error가 발생을 하고

    > 정정인 DLL 함수호출을 사용하면 전혀 문제가 없는데......

    >

    > 전문가님의 도움을 기다립니다...



    이렇게 해보세요...



    procedure TForm1.Button1Click(Sender: TObject);

    type

    TGetDistance = Procedure(treeview1: TTreeview); //선언

    var

    handle : thandle;

    GetDistance: TGetDistance;

    FuncPtr: TFarProc;

    begin

    handle:=loadlibrary('project2.dll'); //dll을 로드

    FuncPtr:=GetProcAddress(handle,'libmenu_loadmenu'); //해당 프로시져로드해서 변수에 집어 넣음..

    @GetDistance :=FuncPtr; // 해당 프로시져로

    GetDistance('aaa'); // 프로시져실 실행 이때 aaa에 넘겨줄 인자

    freelibrary(handle); // dll 해제

    end;





    대답이 되셨기를...

    이렇게 해도 문제가 나타난다면 dll의 문제는 아닌것 같습니다..



    류민철..