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_PDBeide 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 DLLForm1 = 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. ]