Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: VCL (C++ Builder) ::  DLL und DataModule     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Mario Rosenbohm
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.10.2002
Beiträge: 132
Beitrag Mario Rosenbohm Mitglied 19:35:00 22.12.2002   Titel:   DLL und DataModule            Zitieren

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:
// 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:
Code:
1
2
3
4
5
6
7
8
9
10
11
  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 :confused:

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

Benutzerprofil
Anmeldungsdatum: 18.06.2002
Beiträge: 3665
Beitrag F98 Mitglied 21:40:00 22.12.2002   Titel:              Zitieren

Probier mal das:

C++:
TDataMod_PD *DataMod_PD = new TDataMod_PD(NULL);


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

Benutzerprofil
Anmeldungsdatum: 02.10.2002
Beiträge: 132
Beitrag Mario Rosenbohm Mitglied 23:37:00 22.12.2002   Titel:              Zitieren

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 :confused:
Mario Rosenbohm
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.10.2002
Beiträge: 132
Beitrag Mario Rosenbohm Mitglied 18:44:00 25.12.2002   Titel:              Zitieren

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 :cool:
Mario Rosenbohm
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.10.2002
Beiträge: 132
Beitrag Mario Rosenbohm Mitglied 22:52:00 27.12.2002   Titel:              Zitieren

Hi,

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

Form1 = Artikel.cpp
Code:
.....
#pragma resource "*.dfm"
TArtikelverwaltung *Artikelverwaltung;
//---------------------------------------------------------------------------
.....


Form2 = DataMod_PD.cpp
Code:
.....
#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 :rolleyes:
[edit] scheiß Tippfehler [/edit]

[ Dieser Beitrag wurde am 27.12.2002 um 21:54 Uhr von Mario Rosenbohm editiert. ]
c++.de :: VCL (C++ Builder) ::  DLL und DataModule   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.