Почему LoadLibrary Fail только когда EXE запускается из IDE? - PullRequest
0 голосов
/ 12 января 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;

Если я запускаю Exe из IDE, он не работает, если я запускаю EXE из каталога, просто дважды щелкнув по нему, это успешно !! ??

Пожалуйста, скажите мне, что мне не хватает.

Спасибо, Фред

РЕДАКТИРОВАТЬ: запуск EXE через IDE работает с Delphi 7 !! WTf это проблема с D2009 ??

Ответы [ 3 ]

4 голосов
/ 12 января 2009

Обычная проблема с ошибкой LoadLibrary состоит в том, что требуемая DLL не находится в пути поиска DLL . Возможно, D2009 по какой-то причине не выполняет поиск в тех же папках.

Чтобы убедиться, вы должны получить более подробную информацию об ошибке, используя что-то вроде ...

ShowMessage(SysErrorMessage(GetLastError));

Попробуйте (даже временно) поместить файл "oci.dll" в тот же каталог, в котором находится .EXE вашего проекта, и повторите попытку.

Вот несколько вещей, которые нужно проверить:

  • В каком каталоге находится oci.dll?
  • Включен ли этот каталог в переменную окружения "PATH"? Если нет, попробуйте это.
  • Возможно, вы установили переопределение для PATH на экране Delphi Tools / Options / Env variable?
2 голосов
/ 12 января 2009

Если зависимая DLL находится в том же каталоге ... убедитесь, что это ваш каталог запуска.

Это происходит со мной все время в Visual Studio тоже ...

0 голосов
/ 04 февраля 2009

Я подозреваю, что автономный вызов работает, потому что DLL находится в текущем каталоге.

И при запуске из IDE текущий каталог отличается от каталога EXE.

Вы пытались использовать полный путь к DLL (т.е. что-то вроде пути из ParamStr (0) плюс имя DLL)?

...