Announcement

Collapse
No announcement yet.

DLL mit 2 Forms(Datamodul)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DLL mit 2 Forms(Datamodul)

    Hallo,<P>

    Ich bin zur Zeit dabei eine Anwendung in mehrere DLL`s aufzuteilen.
    Im großen und ganzen klapps gut. Aber in einer DLL, welches 2 Forms (1 ist ein Datamodul) aufrufe kommt nachdem ich die Forms aufgerufen habe eine Zugriffsverletzung
    <P>
    {<BR>
    ...<BR>
    TForm1 *Form1;<BR>
    Form1 = new TForm1 (NULL);<BR>
    ...<BR>
    Form1->Show();<BR>
    beim ersten Zugriff auf eine Variable aus Form1 in Form2 eine Zugriffsverletzung. Es liegt nicht am Datamodul, da der gleiche Effekt bei einem leeren Formular und dem Aufruf der Variable erfolgt. <BR>
    void __fastcall TForm1::FormCreate(TObject *Sender) <BR>
    {<BR>
    FormObjekt->Neues_Objekt = true;<BR>
    }<BR>
    FormObjekt wird mit NULL am Haltepunkt angegeben und Neues_Objekt mit ???<BR>
    Wie muß ich mein Projekt ändern, damit es ordentlich läuft.<BR>
    Wenn ich in der DLL die Formulare mit Application->CreateForm(__classid(... erzeuge bekomme ich keinen Fehler.<BR>
    <P>
    <P>
    mfg.
    <P>
    Andre

  • #2
    Hallo Andre,<br>
    die Sache mit Formularen aus bzw. in DLLs ist nicht so ganz einfach. Ich programmiere seit mehreren Jahren an einem großen (z.T auf DLLs verteilten) Projekt und habe schon Einiges in diesem Zusammenhang 'beübt'. Hauptproblem ist wohl, dass das Application-Object einer DLL nicht so ganz mit dem einer EXE zu vergleichen ist: Einige Eigenschaften werden aus der Hauptanwendung weitergegeben, andere nicht. Die Frage ist auch, woran Deine Formulare 'gebunden' sein sollen: an die Hauptanwendung (modal dazu?) oder eben nicht. Ganz gute Erfahrungen habe ich mit folgender Methode gemacht:<br><br>
    - Dynamische RTL verwenden<br>
    - in einer DLL (nennen wir mal 'RtDll') einen Verweis auf 'Application->MainHandle' der EXE aufheben<br>
    - in der anderen DLL vor dem Erzeugen eines Formulars 'Application->MainHandle = RtDll->MainHandle' zuweisen<br><br>
    Du musst aber aufpassen, falls die DLL abgebunden wird, weil dann der Stack 'bereinigt' wird und somit unter Umständen die 'Z-Order' der Formulare durcheinander gerät.<br><br>Ist bissel schwer, das hier in der Kürze schlüssig zu schildern... :-(<br>
    Für weitere Fragen: [email protected]

    Gruß Knu

    Comment

    Working...
    X