C++ to PB

Fragen zu allen anderen Programmiersprachen.
Dare Devil
Beiträge: 237
Registriert: 17.10.2008 18:24
Kontaktdaten:

Beitrag von Dare Devil »

edel hat geschrieben:Was ist das eigentlich fuer ein Projekt, CLR oder Win32?
normales Win32 natuerlich... (Code sollte eigtl. plattformunabhaengig sein)

unter anderem hab ich das Problem, dass es "push_back" in der Stringklasse in VC6 nicht gibt ... (in der Vector-Klasse allerdings schoen wie mir scheint :? ). Wie laesst sich das in VC6 loesen?
Bild + Bild

Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

zum anfuegen kannst du es ja mal mit += versuchen. Wenn ich dich jetzt richtig verstanden habe.

Code: Alles auswählen

 str += "bla";
 str += "lala";
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag von milan1612 »

edel hat geschrieben:zum anfuegen kannst du es ja mal mit += versuchen. Wenn ich dich jetzt richtig verstanden habe.

Code: Alles auswählen

 str += "bla";
 str += "lala";
Das funktioniert vielleicht mit Strings, aber wenn du eine char Variable
anhängen willst kommt man wohl nicht um push_back herum...
(Hatte das gleiche Problem erst letzte Woche)
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Nein, das geht mit beiden.

Code: Alles auswählen

#include <string>

std::string MyString;

extern "C" const char* test()
{
	MyString = "lulu";	
	MyString += 'a';

	return MyString.c_str();
}

Code: Alles auswählen

Import "test.lib"
  test()
EndImport 

Import "msvcprt.lib"
EndImport 

Debug PeekS(test())
lulua
Dare Devil
Beiträge: 237
Registriert: 17.10.2008 18:24
Kontaktdaten:

Beitrag von Dare Devil »

Hallo nochmal,

also ich denke ich habs jetzt hinbekommen den Code VC6-kompatibel zu machen. Scheint ganz gut zu funktionieren.

Nun haette ich da noch eine Frage. Wie erstelle ich jetzt die ".lib"-Datei? :oops:

//edit
@Milan
In VC6 scheint das anhaengen eines chars an einem C++-String jedenfalls noch so zu funktionieren ...
Bild + Bild

Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

http://www.edgelib.com/images/support/t ... newprj.gif

ganz unten, einfach nen ganz leeres Projekt erstellen, ohne Header usw.
Am besten dann gleich mit "Release" kompilieren.
Dare Devil
Beiträge: 237
Registriert: 17.10.2008 18:24
Kontaktdaten:

Beitrag von Dare Devil »

edel hat geschrieben:www.edgelib.com/images/support/tutorial ... newprj.gif

ganz unten, einfach nen ganz leeres Projekt erstellen, ohne Header usw.
Am besten dann gleich mit "Release" kompilieren.
Hm, hab ich alles durchprobiert, nur finde ich nirgends eine ".lib"-Datei ...
bin ich jetzt echt zu bloed, die zu finden? :oops:



//edit
Der letzte Punkt "Win32 Static Library" ist bei mir nicht vorhanden :shock:
Bild + Bild

Bild
Dare Devil
Beiträge: 237
Registriert: 17.10.2008 18:24
Kontaktdaten:

Beitrag von Dare Devil »

Okay, habs nun endlich geschafft ...

Ich versuch grad meine Funktionen in PB zu implementieren, da taucht dieser Fehler auf:

Bild

Hab ich was falsch gemacht?

//edit
Hier die Deklaration meiner Funktionen, wenns hilft:

Code: Alles auswählen

extern "C" void ChangeLine(string&, string, string, bool, int);
extern "C" void ChangeWord(string&, string&);
extern "C" bool CheckColor(string);
extern "C" void RemoveNewLine(string&);
In PB:

Code: Alles auswählen

Import "staticlib.lib"
  ;ChangeLine(para1.s, para2.s, para3.s, bool.l, int.l)
  ;ChangeWord(string1.s, string2.s)
  CheckColor.b(color.s)
  ;RemoveNewLine(string1.s)
EndImport

Import "msvcprt.lib"
EndImport
Bild + Bild

Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

du kannst keine stl strings als parameter benutzen, da PB nur einen
Zeiger auf eine Zeichenkette uebergibt. du musst also "char *" benutzen
und diesen dann an einen stl String uebergeben.

Code: Alles auswählen

extern "C" void bla(char* str)
{
  sdt::string mystr = str;
  [...]
}
Fuer die symbole die nicht gefunden werden koennen, kannst du mal die
msvcrt.lib noch mit einbinden.

Code: Alles auswählen

import "msvcrt.lib"
endimport
Benutzeravatar
inc.
Beiträge: 348
Registriert: 27.10.2004 12:25

Beitrag von inc. »

Dare Devil hat geschrieben:Wie laesst sich das ueber VC2008 Express loesen? Und was genau muss ich machen, damit das ganze unter PB funktioniert?
Resultierende Libs aus VC 2005 und VC 2008 machen in PB später Probleme. M$ hat seit VC 2005 eine Änderung vorgenommen, was das dynamische linken mit der MSVCRT angeht.

Selbst wenn das Kompilat auf deinem Win XP System läuft, funktionierts dann bei jemand anderem nicht mehr. Selbst die Redistributables schaffen oft kaum Abhilfe.

Mein Tip: Nehme den Kostenlosen MS VC++ 2003 Toolkit Kompiler ( http://www.uploading.com/files/HNH73WB3 ... ).zip.html ) + Platform SDK ... oder MinGW/GCC.
Und als IDE kannst du bei beiden Code::Blocks nutzen. Diese Kombi hat bei mir noch nie Probleme bereitet. Und Code::Blocks ist sehr übersichtlich und alles andere als aufgebläht. Ebenso wie der Installer, denn der Installer bei den MS VC Produkten bringt viel Zeugs auf die Platte, was gar nicht nötig ist.
Hier gibts die OOP Option für PureBasic.
Antworten