![]() |
Zugriffsfehler DLL
Hey Delphi-Gemeinde,
ich habe ein Problem mit einer function in einer DLL, doch diese gibt mir immer ein Zugriffsfehler zurück. Ich konnte das Problem zwar eingrenzen dennoch bin ich zu keiner Lösung gekommen. Und zwar, wenn ich den Rückgabewert als Integer deklariere, dann funzt es einwandfrei, aber bloss als string nicht. Code: Deklarationen:
Delphi-Quellcode:
function im Hauptprogramm:
type
TDLL = Procedure; StdCall; TPlugin = function(URL: String): String; StdCall; TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); function DLL(Dateiname, Name: String; URL: String): String; private { Private-Deklarationen } public { Public-Deklarationen } end;
Delphi-Quellcode:
Aufruf der DLL:
function TForm1.DLL(Dateiname, Name: String; URL: String): String;
var Plugin: TPlugin; Handle: THandle; begin Handle := LoadLibrary(PCHAR(ExtractFilePath(ParamStr(0)) + '\dlls\' + Dateiname)); if Handle <> 0 then BEGIN @Plugin := GetProcAddress(Handle, PCHAR(Name)); if @Plugin <> nil then begin result := Plugin(URL); end; END; FreeLibrary(Handle); end;
Delphi-Quellcode:
die DLL:
procedure TForm1.Button1Click(Sender: TObject);
var Test: STring; begin Test := DLL('test.dll','Anzeigen','Test'); ShowMessage(Test); end;
Delphi-Quellcode:
Also wie gesagt, wenn ich den Rückgabewert als Integer definiere und die var URL auch, dann funzt es!
function Anzeigen(URL: String): String; StdCall;
begin if URL = 'Test' then Result := 'Funzt'; end; exports Anzeigen; Wo liegt der Fehler, dass er string nicht mag? Gruss Daniel |
Re: Zugriffsfehler DLL
Strings in DLL? Wird auch schön ShareMem verwendet so wie auch bei anlegen des DLL-Projektes als Kommentar geschrieben wird?
|
Re: Zugriffsfehler DLL
Zitat:
Vorher hatte ich es über eine ini-Datei gemacht, wo ich den Stringwert dort gespeicher habe und im Hauptprogramm wieder ausgelesen habe. Aber das ständige öffnen / schließen der ini das dauert mir zulange. Nein, ShareMem wird nicht verwendet, wie kann cih es denn einbinden? Gruss Daniel |
Re: Zugriffsfehler DLL
Zitat:
![]() |
Re: Zugriffsfehler DLL
Du solltest auch deine Variable "Handle" in der Form1 Methode umbenennen. Es gibt eine entsprechend gleich benannte Eigenschaft von TForm, welche auch den gleichen Datentyp hat.
|
Re: Zugriffsfehler DLL
Zitat:
Zitat:
Vielen Dank für die vorallem schnelle Hilfe! gruss Daniel |
Re: Zugriffsfehler DLL
Hallo,
um sharemem zu umgehen, könntest du auch ShortString benutzten (max 255). Heiko |
Re: Zugriffsfehler DLL
oder PChar, eben genau so wie es in der Hilfe bzw. dem Infotext in einem firschen DLL-Projekt vermerkt ist.
|
Re: Zugriffsfehler DLL
fastsharemem wäre noch eine Möglichkeit umd der zusätzlichen DLL zu entgehen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz