Problemy z własnym DLL w delphi

Problemy z własnym DLL w delphi
Andrzej Gicala
  • Rejestracja:prawie 4 lata
  • Ostatnio:około 2 miesiące
  • Postów:17
0

Witam

Potrzebuje przenieść pewne funkcji z aplikacji do DLL. Ponieważ wcześniej nie robiłem tego rozpoczołem od prostego przykładu:
DLL :

Kopiuj
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 :

Kopiuj
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

edytowany 1x, ostatnio: Andrzej Gicala
KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Gorlice
2

Zbędne export a nawet stdcall ponieważ funkcja nie przyjmuje żadnych argumentów. Do tego wyraźnie masz napisane że typu string nie powinno się przekazywać w DLL a jeżeli już to używać ShareMem i to robisz tylko to wymaga biblioteki BORLANDMM.DLL którą najlepiej umieścić w folderze z programem wynikowym.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
woolfik
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 22 godziny
  • Postów:1597
0

Mam taki demo z czasu studiów. Z ciekawości przekompilowałem to teraz w nowym delphi żeby sprawdzić czy działa także powodzenia:
DLL_Example.zip

Andrzej Gicala
  • Rejestracja:prawie 4 lata
  • Ostatnio:około 2 miesiące
  • Postów:17
0

@kAzek dziękuje skopiowałem plik BORLANDMM.DLL - zadziałało. Dla próby skasowałem go - działa nadal - nie wiem o co chodzi ale jak działa to już nie ruszam :)
@woolfik - dziękuje - twój porzykład działał od kopa.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.