Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem: DLL Funktion kann nicht 2x aufgerufen werden ?! (https://www.delphipraxis.net/68293-problem-dll-funktion-kann-nicht-2x-aufgerufen-werden.html)

andimx 27. Apr 2006 14:53


Problem: DLL Funktion kann nicht 2x aufgerufen werden ?!
 
Hallo,

Ich schreib gerade eine DLL die man in verschiedene Programmiersprachen integrieren soll.
In der DLL befindet sich ein ComServer sowie zahlreiche Funktionen unter anderem auch mehrere um
ein Datenformat zu bearbeiten das unterteilt ist in Branch's und Leaf's (also Stämme und Blätter).
Das Datenformat ist kommt einer Baumstruktur gleich.

Nun das Problem. Ich habe 2 Dialoge in die DLL ausgelagert, die auch von anderen programmen genutzt werden soll.

Delphi-Quellcode:
function ExecuteBranchDialog(ParentWindow: LongWord; pItemData: PSTRUCTPCSITEM): Boolean; stdcall; export;
var P: TdlgBranchEditForm;
begin
        Result := FALSE;
try
        if (pItemData = nil) or (pItemData^.ItemType <> PCSITEMBRANCH) then Exit;

        P := TdlgBranchEditForm.CreateParented(ParentWindow);
        P.txtBranchname.Text := pItemData^.ItemName;
        P.txtUpdateRate.Text := IntToStr(pItemData^.ItemUpdateRate);
        P.ShowModal;
        Result := P.WindowResult;
        if (Result) then begin
         pItemData^.ItemName := P.txtBranchname.Text;
         pItemData^.ItemUpdateRate := StrToIntDef(P.txtUpdateRate.Text, 0);
        end;
        P.Free;
except
        Result := FALSE;
end;
end;

Der Pointer bei der Übergabe ist gültig (mehrmals überprüft), trotzdem kommt eine EAccessViolation Exception.
Auch wenn ich die anderen Funktionen aus meiner DLL mehrmals hintereinander aufrufe kommt der Fehler...

Hat jemand ne Ahnung warum Delphi das macht?

Hier mal die Deklarationen und auch die Deklarationen von anderen functions:

Delphi-Quellcode:
       

        function CreateProcessControl(pPCS: PSTRUCTPCS): Boolean; stdcall; external PCSDLL;
        function FreeProcessControl(pPCS: PSTRUCTPCS): Boolean; stdcall; external PCSDLL;
        function CreateBranch(pPCS: PSTRUCTPCS; BranchName: ShortString; UpdateRate: Integer): Byte; stdcall; external PCSDLL;
        function GetVarTypeName(VarType: Integer): ShortString; stdcall; external PCSDLL;
        function GetVarType(VarTypeName: ShortString): Integer; stdcall; external PCSDLL;
        function ExecuteBranchDialog(ParentWindow: LongWord; pItemData: PSTRUCTPCSITEM): Boolean; stdcall; external PCSDLL;
Gruß
Andi

[edit=Luckie]
Zitat:

Zitat von andimx
Hat keiner einen Hinweis?

Äh dir ist klar, dass dein erstes Posting erst eine Stunde alt ist? Pushposting gelöscht.
Mfg, Luckie[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 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 by Thomas Breitkreuz