为什么LoadLibrary仅在从IDE启动EXE时失败?

时间:2009-01-12 09:45:12

标签: delphi dll delphi-2009

在Delphi 2009上,关于一个新的VCL项目:

procedure TForm1.FormCreate(Sender: TObject);
var
    Handle: THandle;
begin
    Handle := loadlibrary('oci.dll');
    if Handle <> 0 then
    begin
        try
            ShowMessage('Success');
        finally
            FreeLibrary(Handle);
        end;
    end
    else
        ShowMessage('Fail');
end;

如果我从IDE运行Exe,它会失败,如果我从目录运行EXE,只需双击它就会成功!! ??

请告诉我我错过了什么。

谢谢, 佛瑞德

编辑:通过IDE启动EXE与Delphi 7一起使用!! WTf是D2009的问题?

3 个答案:

答案 0 :(得分:4)

LoadLibrary失败的常见问题是所需的DLL不在DLL search path.。由于某种原因,D2009可能没有搜索相同的文件夹。

为了确保,您应该使用类似......

之类的内容获取错误的更多详细信息
ShowMessage(SysErrorMessage(GetLastError));

尝试(甚至暂时)将“oci.dll”放在与项目的.EXE相同的目录中,然后重试。

以下是要检查的内容:

  • oci.dll位于哪个目录下?
  • 该目录是否包含在“PATH”环境变量中?如果没有,请尝试。
  • 您是否可以在Delphi Tools / Options / Env变量屏幕中为PATH设置OVERRIDE?

答案 1 :(得分:2)

如果依赖DLL位于同一目录中......请确保您的启动目录是它。

在Visual Studio中也一直发生这种情况......

答案 2 :(得分:0)

我怀疑独立调用是否有效,因为DLL恰好位于当前目录中。

并且,从IDE启动时,当前目录与EXE目录不同。

您是否尝试使用DLL的完整路径(例如,来自ParamStr(0)的路径加上DLL名称)?