1

在 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的问题??

4

3 回答 3

4

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

为确保,您应该使用类似...的内容获取错误的更多详细信息

ShowMessage(SysErrorMessage(GetLastError));

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

以下是一些需要检查的事项:

  • oci.dll 位于哪个目录?
  • 该目录是否包含在“PATH”环境变量中?如果没有,请尝试。
  • 您是否可能在 Delphi Tools/Options/Env variables 屏幕中为 PATH 设置了 OVERRIDE?
于 2009-01-12T09:50:55.853 回答
2

如果依赖的 DLL 在同一个目录中……确保你的启动目录就是它。

这在 Visual Studio 中也经常发生在我身上......

于 2009-01-12T09:47:48.167 回答
0

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

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

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

于 2009-02-04T13:22:59.803 回答