DLL und DataModule



  • Hallo,

    folgendes Problem:
    Ich habe ein Formular und ein DataModul. Wenn sich beide im *.Exe Project befinden, funktioniert alles bestens.
    Stelle ich nun das Formular und das DataModul in das *.dll Project, bekomme
    ich beim Formular Fehlermeldungen, wenn es auf das DataModul zu greift.
    etwa so:

    // Code aus Artikel.cpp
    if (!DataMod_PD->TA_PD_Uebers->Active)
         DataMod_PD->TA_PD_Uebers->Active = true;
    

    In der DLL rufe ich das Form so auf:

    try
      {
        TDataMod_PD *DataMod_PD = new TDataMod_PD(Application);
        TArtikelverwaltung *Artikelverwaltung = new TArtikelverwaltung(Application);
        Artikelverwaltung->ShowModal();
      }
      __finally
      {
        delete Artikelverwaltung;
        delete DataMod_PD;
      }
    

    DataMod_PD ist zur Fehlerzeit NULL.
    Wie kann oder muss ich dem Artikel.cpp mitteilen, welchen Wert DataMod_PD hat.
    In der Application exestieren ja automatisch die Pointer der Formulare/Module.

    Danke Mario 😕

    [ Dieser Beitrag wurde am 22.12.2002 um 18:37 Uhr von Mario Rosenbohm editiert. ]



  • Probier mal das:

    TDataMod_PD *DataMod_PD = new TDataMod_PD(NULL);
    

    oder schau auf meiner Seite unter "BC++ Builder -> DLLs"



  • Sorry,
    da habe ich mich wohl ein wenig "dumm" ausgedrückt.

    In der DLL sind 2 Formulare,
    1. TArtikelverwaltung und
    2. TDataModule_PD

    Beide Formulare greifen auf das je andere zu.

    bis jetzt habe ich es geschaft, das ich in die Klasse TArtikelverwaltung
    eine public variable "TDataModule_PD *DataModule_PD;" eingefügt habe, und diese
    nach dem erstellen der beiden Forms mit "... = new T...(NULL)" mit
    "Artikelverwaltung->DataModule_PD = DataMod_PD;" zuweise.
    Dazu muss ich in der "Artikel.h" die "DataModul_pd.h" includieren.

    das geht einwandfrei.

    Versuche ich es aber auch bei der "DataModul_PD.h" eine public variable
    vom Type "TArtikelverwaltung *Artverw;" einzufügen, mekert er trotz des includierens der "Artikel.h" das er einen Typenamen erwartet ???

    Wiso ? Mario 😕



  • Ho ho ho,

    Frohes Fest noch.

    Ich habe schon einiges probiert, ja ich war auch in den FQA's.
    Doch das dort beschriebene Beispiel funktioniert nur wenn beide
    Form's in dem *.exe-Projekt stehen.
    Wenn sich beide im *.dll-Projekt befinden kennen sie sich trotz
    gegenseitigem Include nicht, WARUM ?

    Schöne Feiertage,
    Gruß Mario 🕶



  • Hi,

    Problem gelöst.
    Also: 2 Forms in der DLL

    Form1 = Artikel.cpp

    .....
    #pragma resource "*.dfm"
    TArtikelverwaltung *Artikelverwaltung;
    //---------------------------------------------------------------------------
    .....
    

    Form2 = DataMod_PD.cpp

    .....
    #pragma resource "*.dfm"
    TDataMod_PD *DataMod_PD;
    //---------------------------------------------------------------------------
    .....
    

    Dann in die ArtVerw.cpp(wird ArtVerw.dll)[code]
    extern "C" __declspec(dllexport) void ShowArtikelverwaltung();
    **
    extern TDataMod_PD *DataMod_PD;
    extern TArtikelverwaltung *Artikelverwaltung;
    **
    //---------------------------------------------------------------------------
    void ShowArtikelverwaltung()
    {
    DataMod_PD = new TDataMod_PD(NULL);
    Artikelverwaltung = new TArtikelverwaltung(NULL);
    Artikelverwaltung->ShowModal();
    delete Artikelverwaltung;
    delete DataMod_PD;
    }[/code]
    ... und schon kennt Form1 Form2 und umgekehrt.

    Na dann...
    Mario 🙄
    [edit] scheiß Tippfehler [/edit]

    [ Dieser Beitrag wurde am 27.12.2002 um 21:54 Uhr von Mario Rosenbohm editiert. ]


Anmelden zum Antworten