CTString einbinden

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Der Eisvogel

Betreff: CTString einbinden

BeitragFr, Jun 24, 2011 14:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Ich arbeite derzeit daran eine Funktion eines andere Programms aufzurufen, die als Parameter 2 Klassen des Types CTString erwartet.
Leider scheitere ich daran eine Objekt der Klasse mittels der im Fremd-Programm enthaltenen Funktionen zu erstellen. Kann ich die Klasse CTString irgendwie selbst in BlitzMax implementieren, sodass ich die Objekte der Klasse an die Funktion reichen kann?

Hier die Doku zu der Klasse:
http://www-sop.inria.fr/orion/...tring.html

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

blackgecko

BeitragFr, Jun 24, 2011 16:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau mal in der Hilfeleiste der BlitzMax IDE unter Help>Language>Advanced Topics>Interfacing with C
Ein bisschen runterscrollen, dann steht da Zitat:
Extern can also be used to work with C++ style objects from within BlitzMax.

Das könnte dir vielleicht helfen.
So long and thanks for all the fish.
Fedora 17 | Windows 7 || BlitzPlus | BlitzMax
Rechtschreibflame GO!!! Deppenapostroph | SeidSeit | Deppenakzent | DassDas | Deppenleerzeichen | TodTot | enzigste.info - Ja, ich sammel die.

Der Eisvogel

BeitragFr, Jun 24, 2011 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja das weiß ich, jedoch weiß ich nicht wie ich jetzt CTString einbinden kann, weil ich den Source erstens nicht finde und zweitens weiß ich bisher nur wie man auch Funktionen von zugreifen kann, aber nicht auf Klassen und Methode in C++.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

BtbN

BeitragFr, Jun 24, 2011 19:15
Antworten mit Zitat
Benutzer-Profile anzeigen
BMax unterstützt nur speziell angepasste klassen, es ist unmöglich, diese Klasse von BMax aus zu instanzieren.

Farbfinsternis

BeitragFr, Jun 24, 2011 19:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst die Methoden der Klasse mittels eines C-Interface aufdröseln und in BMax dann die Klasse nachbauen. Anders geht es nicht.
Farbfinsternis.tv

Der Eisvogel

BeitragFr, Jun 24, 2011 19:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Das übersteigt dann leider meine Fähigkeiten seiten C++.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Farbfinsternis

BeitragFr, Jun 24, 2011 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn das Deine Fähigkeiten übersteigt ... was dachtest Du würde BMax da für Dich tun? Hole Dir ein Objekt der Klasse in einer C-Funktion (CTInit() oder initCT() oder ... whatever), sichere das Objekt in BMax und übergebe es jeder C Funktion die Methoden dieses Objekts aufruft.
Farbfinsternis.tv

Der Eisvogel

BeitragFr, Jun 24, 2011 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Weiß denn jemand wo man den kompletten Source von der Library downloaden kann? Google spuckt dazu irgendwie nicht viel aus, sondern zeigt mir immer nur Ergebnisse für CString. Was andere als die obene genannte Referenz find ich nicht. Da jede einzelen Datei runterzuladen dauert ewig.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Farbfinsternis

BeitragFr, Jun 24, 2011 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
[EDIT]Hatte hier eine Liste gepostet, die Klasse war da aber nicht dabei ... sry[/EDIT]

Ich habe mir das jetzt mal angeschaut. Die Klasse CTString ist Teil einer Engine und wird von CTObject abgeleitet. Das heißt dass Du etwas mehr Arbeit hast wenn Du das porten willst. Was soll das überhaupt bringen? Was kann diese Klasse was BMax nicht selbst könnte oder was man auf keinen Fall selbst implementieren könnte?
Farbfinsternis.tv

Der Eisvogel

BeitragFr, Jun 24, 2011 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich brauch diese Klasse um sie in Verbindung mit einer Funktion eines fremde Prozesses aufzurufen.
Die Funktion erwartet 2 Parameter der Klasse CTString. Daran kann ich auch nichts ändern, da es, wie gesagt, ein fremdes Programm ist, dessen Funktion ich aufrufen möchte. Der Funktionsaufruf selbst ist nicht das Problem. Andere Funktionen die Paramter wie Integer enthalten kann ich Problemlos verwenden, nur eben jene mit CTString nicht. Deswegen bräuchte ich eine Implementation der Klasse.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Farbfinsternis

BeitragFr, Jun 24, 2011 20:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann erzähle uns bitte welche Funktion das ist und wo sie hingehört ... wenn man den Kontext kennt kann man sicher besser helfen. Also: Was willst Du erreichen und wie hast Du es bisher versucht.
Farbfinsternis.tv

Noobody

BeitragFr, Jun 24, 2011 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Farbfinsternis hat Folgendes geschrieben:
Du kannst die Methoden der Klasse mittels eines C-Interface aufdröseln und in BMax dann die Klasse nachbauen. Anders geht es nicht.

Stimmt nicht. In BMax kann man ohne weiteres C++-Klassen einbinden, indem man einfach den Type in den Extern-Block stellt (siehe Dokumentation "Advanced Topics -> Interfacing with C").

Der einzige Zusatzaufwand ist, dass man C++-Funktionen braucht, um den Type zu instanzieren und wieder zu löschen, was aber erheblich einfacher ist, als den ganzen Type zu wrappen.

Das gesamte Pub.DirectX-Modul wurde zum Beispiel so umgesetzt (einfach lauter Types in Extern-Blöcken). Jede der über 300 Methoden von Hand in C zu wrappen wäre eine unmenschliche Arbeit gewesen.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

BtbN

BeitragFr, Jun 24, 2011 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
BMax Klassen mapping funktioniert nur, wenn sämmtliche methoden virtual sind, was sie im fall der CTString klasse nicht sind.
Mit DirectX funktioniert das, weil es COM objekte sind, die sich nochmal anders verhalten.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group