Witam
Potrzebuje przenieść pewne funkcji z aplikacji do DLL. Ponieważ wcześniej nie robiłem tego rozpoczołem od prostego przykładu:
DLL :
library Test;
uses
ShareMem,System.SysUtils,System.Classes;
{$R *.res}
Function GetText:String; stdcall; export;
begin
result:='TEST123456';
end;
exports
GetText;
begin
end.
i program ma na formie tylko 1 button i edit :
unit main;
interface
uses
ShareMem, Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
GroupBox1: TGroupBox;
ListBox1: TListBox;
GroupBox2: TGroupBox;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
function GetText:string; stdcall; external 'Test.dll'
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.text:=GetText;
end;
end.
Po uruchomieniu przycisk wkleja tekst 'TEST123456' do edita bez problemu ale aplikacja przy zamknięciu wali błędem "
Project TestDll.exe raised exception class $C0000005 with message 'access violation at 0x6c5999a1: write of address 0x03a15fd4'."
Chyba nie ma prostszego przykładu na użyciwe własnego dll - więc o co chodzi ?
Delphi 12.2
Z góry dziękuje za wskazanie ew. błędów.
Andrzej