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.