Seite 1 von 2

C++ to PB

Verfasst: 19.01.2009 20:12
von Dare Devil
Hallo,
hab aus Spass und Uebung (um meine eingerosteten C++-Kenntnisse wieder aufzufrischen) ein kleines Programm geschrieben, dass HTML-Code aus PB-Code generiert (Syntaxhighlighting) ... Aus diesem kleinen Projekt ist jetzt ein ziemlich umfangreiches geworden mit sehr vielen Einstellungsmoeglichkeiten - und ich bin wirklich sehr zufrieden damit.
Da das ganze aber nur unter Konsole funktioniert (meine WinAPI-Kenntnisse sind sehr schwach ...), dachte ich mir ich nutz meine in C++ geschriebenen Funktionen und setze sie in PB ein ... Dann muss ich nur eine schoene GUI dafuer entwickeln...
Wie stelle ich das an? Wuerde gern darauf verzichten eine DLL zu erstellen, da ich das alles in einer EXE gepackt haben will. Gibts da irgendwelche Moeglichkeiten?

Ich nutze VC++ 2008 Express ...

Verfasst: 19.01.2009 20:18
von DrShrek
sollte sehr einfach sein:

UI in PureBasic
Aufruf aus den UI mittels RunProgram <para1> <para2 <paraN>

Verfasst: 19.01.2009 20:28
von Dare Devil
Nunja,
das waer ne Moeglichkeit. Allerdings hab ich dann 2 EXE-Dateien und ich will ja alles in einer integriert haben ...

Gibts denn echt keine andere Moeglichkeit?

Verfasst: 19.01.2009 20:36
von ts-soft
Include Binary, zweite Exe temporär entpacken, am besten nach temp und
am ende löschen.

Verfasst: 19.01.2009 20:42
von edel
Natuerlich, du erstellst einfach eine statische Lib. Musst deine Funktionen
dann aber als C Funktionen exportieren.

Code: Alles auswählen

extern "C" void bla()
{

}
Eventuell musst du auch die neue Runtime mit einbinden (MSVCRT), PB
nutzt nur Version 6, VC++ 2008 aber Version 9. Bei dem Erstellen der Lib,
solltest du erst einmal alle Optimierungen deaktivieren.

Verfasst: 19.01.2009 20:54
von Dare Devil
edel hat geschrieben:Natuerlich, du erstellst einfach eine statische Lib. Musst deine Funktionen
dann aber als C Funktionen exportieren.

Code: Alles auswählen

extern "C" void bla()
{

}
Eventuell musst du auch die neue Runtime mit einbinden (MSVCRT), PB
nutzt nur Version 6, VC++ 2008 aber Version 9. Bei dem Erstellen der Lib,
solltest du erst einmal alle Optimierungen deaktivieren.
Cool!
Hab da gleich mal einpaar Fragen ... kenne mich da nich so sonderlich gut aus, also bitte um Verstaendnis :wink:

1. Wie meinst du das mit ich muss alle Funktionen als C-Funktionen exportieren? Bedeutet das, ich darf kein standardkomformes C++ verwenden und darf nur C-Funktionen verwenden? Zumal ich ja absolut keine Ahnung von C habe ... :(

2. Wenn sieht dann die Benutzung dieser "statischen Lib" unter PB aus?

3. Wuerde sich das letzter Problem aufheben, wenn ich eine aelter VC++-Version installiere und damit die Lib erstelle? (hab naemlich noch VC++ 6.0 Standard zu Hause, dass ich vor etlichen jahren gekauft habe)

Verfasst: 19.01.2009 21:10
von edel
Ja VC++ V6 ist optimal fuer PB. Zumindest fuer x86. Den Kompiler
nutze ich auch. Die IDE ist dafuer aber ein Graus.

Du kannst natuerlich soviel C++ schreiben wie du lustig bist, PB kann
aber nichts mit C++ Funktionen anfangen. Also musst du sie als C
Funktion exportieren. In der Regel reicht dafuer ein ' extern "C" '
am Funktionskopf.

In PB kannst du sie dann so importieren :

Code: Alles auswählen

Import "deinelib.lib"
  deineFunktion(param,bla)
EndImport 
Oder ImportC wenn du cdecl eingestellt hast.

Verfasst: 19.01.2009 21:16
von Dare Devil
Ok, dankeschoen :allright: - werd das gleich mal ausprobieren und mich im Problemfall nochmal melden :)

Verfasst: 19.01.2009 22:06
von Dare Devil
Ok ... VC6 scheidet schonmal aus, da wirklich absolut gar nichts funktioniert /:-> Ich hab ja gewusst, dass VC6 nicht standardkomform ist - aber gleich so /:-> :(
Wie laesst sich das ueber VC2008 Express loesen? Und was genau muss ich machen, damit das ganze unter PB funktioniert?

Verfasst: 19.01.2009 22:14
von edel
Was ist das eigentlich fuer ein Projekt, CLR oder Win32?