Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   C++ cpp Projekt-gegenseitiger Zugriff der .pas und .cpp Dateien (https://www.delphipraxis.net/106920-cpp-projekt-gegenseitiger-zugriff-der-pas-und-cpp-dateien.html)

stoxx 18. Jan 2008 19:43


cpp Projekt-gegenseitiger Zugriff der .pas und .cpp Dateien
 
Hallo,
ich suche die Loesung, wie man in einem CPP Basiprojekt, in dem auch Pascal Formulare eingebunden sind, folgendes realisieren kann:
Ich moechte von dem Pascal Formular auf das CPP Formular zugreifen.
Der Zugriff von einem CPP formular auf ein Pascal Formular funktioniert. (Form2 ist ein Pascal Formular)

Delphi-Quellcode:
Form2->testVar =2;
Form2->ShowModal();
In Form2 moechte ich unter Pascal zum Beispiel auf die Caption von Form1 (CPP Formular) zugreifen.

Vielen Dank!

Bernhard Geyer 18. Jan 2008 20:00

Re: cpp Projekt-gegenseitiger Zugriff der .pas und .cpp Date
 
Dieses gegenseitiger direkte Zugriff ist m.E. ein beispiel für schlechtes Design/Implementierung. Und dies ist auch mit der Kompination Delphi/C++-Builder auf Sourcecodeebene nicht möglich.

Du hast aber folgende Möglichkeiten:

Form2 stellt properties bereit die Form1 setzt.
Form2 stellt einen Event bereit in dem Form1 die Möglichkeit hat Daten zu setzen.

stoxx 18. Jan 2008 20:16

Re: cpp Projekt-gegenseitiger Zugriff der .pas und .cpp Date
 
hmm ... also so würde es gehen, (Mainform ist das von CCP definierte Hauptformular)


Application.MainForm.Caption := 'neue Caption';

wenn also die Klasse von einer Basisklasse wie in dem Fall TForm abgeleitet ist, geht das.
jetzt moechte ich aber direkt auf form1.VariableX zugreifen.
Es würde mir ja reichen, wenn ich mit der Typumwandlung TForm1(Zeiger).VariableX arbeiten koennte. aber woher bekomme die Definitionen her? Oder wie binde ich sie ein... (USES Unit1 geht nicht so recht)

Muetze1 18. Jan 2008 20:23

Re: cpp Projekt-gegenseitiger Zugriff der .pas und .cpp Date
 
Das geht nicht. C++ und Pascal können nur Elemente austauschen und ansprechen, welche in Pascal definiert wurden. C++ kann zusätzlich noch alles aus der C(++) Welt nutzen, aber Pascal ist dabei aussen vor.

Dein C++ Formular ist immer durch Header/Cpp definiert und somit grundlegend für Pascal unerreichbar (bzw. unverständlich). Zum anderen: Was ist, wenn dein Formular einen std::list<> verwendet? Wie soll denn Pascal das handhaben? Er kennt den Typ noch nichtmal und somit kann er nichtmal sagen wie groß das Ding ist, somit kommt er nichtmal an nachfolgende Daten ran.

Also, bis auf die Möglichkeit im ersten Absatz hast du keine Chance!

/EDIT:
Delphi-Quellcode:
Application.MainForm.Caption := 'neue Caption';
Das funktioniert, weil TApplication in Pascal definiert wurde und von C++ genutzt wird. Es ist eine Pascal Unit die es in beiden Sprachen definiert, instanziiert etc.

Apollonius 18. Jan 2008 20:26

Re: cpp Projekt-gegenseitiger Zugriff der .pas und .cpp Date
 
Du kannst probieren, ein "Pseudo-Formular" zu definieren, in dem das entsprechende Feld an der richtigen Stelle steht. Dann casten und auf das Feld zugreifen. Wenn alles nichts hilft: Assembler.

stoxx 18. Jan 2008 20:51

Re: cpp Projekt-gegenseitiger Zugriff der .pas und .cpp Date
 
hmmm

DGL-luke 18. Jan 2008 21:29

Re: cpp Projekt-gegenseitiger Zugriff der .pas und .cpp Date
 
wenn garnix hilft: C-Interface.

Also stupide functions. was über modulgrenzen hinhaut, muss auch innerhalb eines moduls klappen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz