Q&A

  • vc++ dll 파일을 LoadLibrary 로 불러오는데 오류가 나는데..
vc++ dll 파일을 LoadLibrary 로 불러오는데 오류가 나는데..

LibHandle := LoadLibrary(PChar('UDLL.dll'));
if LibHandle <> 0 then begin
//
end else begin
    MessageDlg('Failed to load dllFile.',mtError,[mbOK],0);
    Exit;
end;

이렇게 했는데 로드가 되질 않네요.

불러올려는 dll 파일과 헤더 파일 같이 올립니다.

헤더부터 수정을 해야 하는건지요?

수정해서 사용할려면 어떻게 해야 하는지.. 기존 다른 dll 은 잘 되었는데 ...
2  COMMENTS
  • Profile
    홍성락 2008.07.20 08:32
    일단 dll이름을 풀로 써보세요
    실행파일과 같이 있다면 LibHandle := LoadLibrary(PChar(ExtractFilePath(Application.ExeName) +'UDLL.dll'));
    근데, dll이라서 다 같진 않을거구요 com,ActiveX이면 유닛을 생성/등록하고 사용하시는게 좋습니다.
    보통 라이브러리 dll이라면 C헤더를 보고 유닛에 일일이 함수헤더와 구조체를 만들어 사용하셔야합니다.
    2가지로 말씀드리면 하나는 말씀하신 방법처럼 동적으로 dll를 로드해서 사용하셔도 되고 아래처럼 아예 함수선언을 하시면 첨부터 DLL를 로드합니다. 적절히 동적으로든 정적으로든 로드해서 사용하세요.
    수정 방법은 새로운 unit를 생성후 사용할 함수의 헤더를 선언 해서 사용하세요. 특이 사용할 구조체도 잘 번역하셔야합니다.그리고 특히 잘 잊는것이 인자의 전달시 우측/좌측 순서를 표준으로 할건지 함수에의해할건지를 잘 선언하세요 register, pascal, cdecl, stdcall, and safecall 이거이 다 해놓고 놓치는 이들이 많아요...

    unit Unit2;

    interface
    const
    UDLL = 'UDLL.dll';

    procedure RefreshFileSystem; cdecl; external UDLL;
    ........

    implementation

    end.
  • Profile
    석주현 2008.07.24 21:00
    질문하신 것과 동일하게 했는데 문제 없이 잘됩니다.
    다른 문제가 있는 것 같습니다.