LoadLibrary не возвращает Handle

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

LoadLibrary не возвращает Handle

Сообщение Unit » 30.08.2013 22:51:14

Dll лежит в одной папке с исполняемым файлом программы.
LoadLibrary при вызове в программе, постоянно возвращает 0 :(
В Delphi всё работает, и VTFLib_Init возвращает True.
Пробовал добавлять {$mode DELPHI}{$H+} , положительного результата не дало.

ОС: Win 7
Lazarus 0.9.30.4 r35940 FPC 2.6.0 x86_64-win64-win32/win64

Код Dll:
Код: Выделить всё
library Core;

function CR_GetInteger: Integer; stdcall; export;
begin
  Result:= 2013;
end;

{ Export }
exports
  CR_GetInteger name 'CR_GetInteger';

begin

end.


В приложении:
Код: Выделить всё
uses dynlibs;

Код: Выделить всё
function VTFLib_Init: Boolean;
begin
  Result := False;
  if LoadLibrary('Core.dll') <> 0 then
    Result := True;
end;
Unit
незнакомец
 
Сообщения: 3
Зарегистрирован: 30.08.2013 22:23:32

Re: LoadLibrary не возвращает Handle

Сообщение B4rr4cuda » 31.08.2013 01:11:09

Попробуйте указать полный путь к библиотеке.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: LoadLibrary не возвращает Handle

Сообщение Unit » 31.08.2013 01:24:16

Всё так же.. А вот библиотека user32.dll странным образом отдаёт Handle.

Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, dynlibs;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption :=  'Handle: '              + IntToStr( LoadLibrary('Core.dll') );
  Label2.Caption :=  'Handle(Полный путь): ' + IntToStr( LoadLibrary('D:\App\Core.dll') );
  Label3.Caption :=  'Handle(user32.dll): '  + IntToStr( LoadLibrary('user32.dll') );
end;

end.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Unit
незнакомец
 
Сообщения: 3
Зарегистрирован: 30.08.2013 22:23:32

Re: LoadLibrary не возвращает Handle

Сообщение Юра » 31.08.2013 01:41:05

Попробуй почитать текст ошибки после неудачного вызова LoadLibrary.
SysErrorMessage(GetLastError)
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Re: LoadLibrary не возвращает Handle

Сообщение Unit » 31.08.2013 02:12:05

Понял в чём проблема была, не удаётся подгрузить Dll x86.
А в Delphi можно.

Причём библиотека была скомпилирована в Delphi. После компиляции в Lazarus всё заработало.
Unit
незнакомец
 
Сообщения: 3
Зарегистрирован: 30.08.2013 22:23:32

Re: LoadLibrary не возвращает Handle

Сообщение Юра » 31.08.2013 13:41:54

Гы, действительно 64-бит экзешник, скомпиленый Лазарусом, никак не сможет загруизить 32-бит ДЛЛ :)
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 251

Рейтинг@Mail.ru
cron