Q&A

  • Windows NT에서 DLL 찾기 실패 문제
저희가 Delphi를 이용하여 업무용 프로그램을 개발하였습니다.

Client를 설치하면 폴더는 다음과 같습니다.



C:misbin

|----------aa.exe

|----------bb.exe

dll

|----------aa.dll

|----------bb.dll



aa.exe는 aa.dll를 이용하게 되어 있습니다.



문제는 windows98에서는 잘 실행이 되는데 이 프로그램을 windows Nt에서

실행하면 aa.dll를 찾을 수 없다는 에러 메세지를 뿌리고 실행을 중지합니다.



아래 부분은 DLL 사용 부분입니다.



procedure TGAXFMAIN.N31Click(Sender: TObject);

var LibHandle: THandle;

ShowPOS :TShowPOS;

begin

LibHandle := LoadLibrary('..dllaa.dll');

try

if LibHandle = HINSTANCE_ERROR then

raise EDLLLoadError.Create('Unable to Load DLL');

@ShowPOS := GetProcAddress(LibHandle,'ShowPOS');



if not (@ShowPOS = nil ) then

// ShowPOS (ParamStr(1),ParamStr(2))

ShowPOS (Edit1.Text, EditPassWord.Text)

else

ShowMessage(IntToStr(GetLastError));

finally

// FreeLibrary(LibHandle);

end;



1  COMMENTS
  • Profile
    sunhee 1999.08.10 03:46
    글쎄요. 원래 dll은 system 폴더에 놓는것이 좋겠지만 그렇지

    않다면 할 수 없겠죠.



    아래를 보니까 loadlibrary에서 상위폴더 dll에서 dll파일을

    가져오는 것으로 되어있는데 현재 폴더가 c:misbin으로 되어

    있지 않은 것같네요.



    아마 시스템별로 다를 겁니다. 이럴때는

    extractfilepath(application.exename)하여 현 exe파일이

    있는 폴더를 정확이 알아내어 처리를 하는 것이 좋을 듯합니다.



    그럼 이만.



    이윤오 께서 말씀하시기를...

    > 저희가 Delphi를 이용하여 업무용 프로그램을 개발하였습니다.

    > Client를 설치하면 폴더는 다음과 같습니다.

    >

    > C:misbin

    > |----------aa.exe

    > |----------bb.exe

    > dll

    > |----------aa.dll

    > |----------bb.dll

    >

    > aa.exe는 aa.dll를 이용하게 되어 있습니다.

    >

    > 문제는 windows98에서는 잘 실행이 되는데 이 프로그램을 windows Nt에서

    > 실행하면 aa.dll를 찾을 수 없다는 에러 메세지를 뿌리고 실행을 중지합니다.

    >

    > 아래 부분은 DLL 사용 부분입니다.

    >

    > procedure TGAXFMAIN.N31Click(Sender: TObject);

    > var LibHandle: THandle;

    > ShowPOS :TShowPOS;

    > begin

    > LibHandle := LoadLibrary('..dllaa.dll');

    > try

    > if LibHandle = HINSTANCE_ERROR then

    > raise EDLLLoadError.Create('Unable to Load DLL');

    > @ShowPOS := GetProcAddress(LibHandle,'ShowPOS');

    >

    > if not (@ShowPOS = nil ) then

    > // ShowPOS (ParamStr(1),ParamStr(2))

    > ShowPOS (Edit1.Text, EditPassWord.Text)

    > else

    > ShowMessage(IntToStr(GetLastError));

    > finally

    > // FreeLibrary(LibHandle);

    > end;

    >