Einzelnen Beitrag anzeigen

andimx

Registriert seit: 14. Apr 2005
Ort: Hohenstein-Ernstthal
67 Beiträge
 
#1

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

  Alt 27. Apr 2006, 14:53
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 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]
  Mit Zitat antworten Zitat