2009-01-12 56 views
0

2009年德尔福,一个新的VCL项目:为什么仅当从IDE启动EXE时LoadLibrary才会失败?

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

+0

当LoadLibrary失败时,GetLastError告诉你什么是原因? – 2009-01-12 10:01:44

+0

GetLastError返回代码是87,似乎是“不正确的参数” – Fred 2009-01-12 10:08:13

回答

4

通常的问题调用LoadLibrary失败的是,所需的DLL是不是在DLL search path.这有可能是D2009并非寻找一些相同的文件夹原因。

要确保,你应该得到的错误的详细信息,使用类似...

ShowMessage(SysErrorMessage(GetLastError)); 

尝试(即使是暂时)将“OCI.DLL”在同一目录,你项目的.exe , 然后再试一次。

这里有一些事情要检查:

  • 哪个目录OCI.DLL位于?
  • 该目录是否包含在“PATH”环境变量中?如果没有,请尝试。
  • 你可能在Delphi工具/选项/环境变量屏幕中为PATH设置了OVERRIDE?
2

如果从属DLL在同一目录中...请确保您的启动目录是它。

这发生在我身上所有的时间在Visual Studio太...

+0

谢谢,但DLL是int系统路径,不在exe文件相同目录 – Fred 2009-01-12 09:55:36

0

我怀疑独立调用是可行的,因为DLL恰好在当前目录中。

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

您是否尝试使用DLL的完整路径(即类似ParamStr(0)加上DLL名称的路径)?

相关问题