Einzelnen Beitrag anzeigen

ghubi01

Registriert seit: 18. Nov 2017
128 Beiträge
 
Delphi 12 Athens
 
#2

AW: Problem mit statischer dll in Lazarus

  Alt 5. Nov 2020, 18:17
Hallo,

kompilierst du in Lazarus mit dem 64Bit Compiler?
Hast du die TestLib.dll auch neu in Lazarus kompiliert, oder benutzt du die Datei, die du schon in D7 verwendet hast?
Delphi-Quellcode:
// Das Beispiel stammt von hier: https://www.delphi-treff.de/tutorials/objectpascal/dlls/4/
// Delphi 10.4.1
library TestDLL;

uses
  System.SysUtils,
  System.Classes;

{$R *.res}

  function addiere(zahl1, zahl2: integer): integer; stdcall;
  begin
    result := zahl1+zahl2;
  end;

exports
  addiere;

begin
end.

// Lazarus
library TestDLL;

{$mode objfpc}{$H+}

uses
  Classes;

function addiere(zahl1, zahl2: integer): integer; stdcall;
begin
  result := zahl1+zahl2;
end;

exports
  addiere;

begin
end.
Das Hauptprogramm:
Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

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

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private

  public

  end;


  function addiere(zahl1, zahl2: integer): integer; stdcall;
  external 'TestDLL.dll';

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  i:=addiere(2,3);
  Memo1.Lines.Add(IntToStr(i));
end;

end.
Ich habe hier testweise mit Delphi 10.4.1 eine Test-DLL erstellt (32Bit und 64Bit) und diese in ein Lazarus-Programm (64Bit Compiler)
eingebunden. Erwartungsgemäß gab es beim Programmstart mit der 32Bit-DLL eine Fehlermeldung und der Vorgang wurde abgebrochen.
Mit der 64Bit-DLL funktionierte es einwandfrei. Ebenso mit einer in Lazarus kompilierten DLL.

Ich vermute mal, dass du 64Bit und 32Bit durcheinander bringst.
  Mit Zitat antworten Zitat