2009-01-12 98 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名稱的路徑)?

相關問題