GLBasic forum

Other languages => GLBasic - de => Topic started by: Heiko on 2008-Jul-31

Title: strings???
Post by: Heiko on 2008-Jul-31
was ist der unterschied zwischen   

Code (glbasic) Select
_Str.c_str()

und

Code (glbasic) Select
_Str.GetStrData()

?

nutze es bei einer funktion als parameterübergabe, und es spukt bei beidem keine fehler aus, muss ja trotzdem ein unterschied sein.

Title: Re: strings???
Post by: minor on 2008-Jul-31
Mahlzeit,

die Prototypen der Operationen lauten:
Code (glbasic) Select

const char* DGStr::c_str()const;
char* DGStr::GetStrData(unsigned int size=256);


Das sollte deine Frage beantworten.

Gruß,
minor
Title: Re: strings???
Post by: Kitty Hello on 2008-Jul-31
Der c_str liefert einen const char*, der GetStrData liefert einen char* auf ein Feld mit einer Mindestlänge von "size" bytes.
Den Unterschied zwischen char* und const char* findest Du hier:
http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.5 (http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.5)
Title: Re: strings???
Post by: Heiko on 2008-Jul-31
naja mir gings um die decl zu gbas geschichte.
weil dort überall
Code (glbasic) Select
_Str.GetStrData() eingesetzt wurde, ich aber vorher überall
Code (glbasic) Select
_Str.c_str() genutzt habe!

Spielt das in diesem Zusammenhang überhaupt eine Rolle?
Wenn da strings übergeben werden, was wäre sinnvoller zu nutzen?

beispiel:

Code (glbasic) Select
//! xSetEffectMatrixArray
// \param ent -
// \param name$ -
// \param bmat -
// \param num -
FUNCTION Xo_SetEffectMatrixArray: ent,name$,bmat,num
INLINE
name_Str.Alloc(512);
xSetEffectMatrixArray(ent,name_Str.GetStrData(),bmat,num);
ENDINLINE
ENDFUNCTION


was bedeutet da noch: 
Code (glbasic) Select
_Str.Alloc(512);

hab ich ja vorher nie verwendet.
Title: Re: strings???
Post by: Kitty Hello on 2008-Jul-31
Na, ich weiß ja bei den GlitzWrappern nicht, ob hier ein char* oder ein const char* gebraucht wird. Also gehe ich auf Nummer Sicher und übergebe einen char*, den ich vorher mit 512 alloziiere.
Title: Re: strings???
Post by: Schranz0r on 2008-Jul-31
bei Blitz sind normal immer Str.c_str()...

bin ich immer gut mit gefahren ;)
Title: Re: strings???
Post by: Heiko on 2008-Jul-31
also mach ich am besten beim DECLARE_ALIAS ein const char*  rein, und in der funktion immer Str.c_str().

und müsste also so passen?
Title: Re: strings???
Post by: Schranz0r on 2008-Jul-31
Normal ja !
Title: Re: strings???
Post by: Kitty Hello on 2008-Jul-31
Ausser z.B. bei Kernel32.dll / GetTempPath usw.
Da scheppert's gewaltig, wenn man nicht GetStrData() verwendet.
Title: Re: strings???
Post by: Schranz0r on 2008-Jul-31
Da schon...

Also man kann immer GetStrData() verwenden?
Title: Re: strings???
Post by: Kitty Hello on 2008-Jul-31
Mei, ist halt das Problem, dass er bei kürzeren String dann erstmal 512 bytes neu allozieert und dann übergibt. Sicherer ist's auf alle Fälle.
OH! Ganz vergessen! Nach dem GetStrData() muss man nochmal ein "myStr.CalculateLen()" machen, weil er dann sucht wo der '\0' ist und intern die Länge einträgt. Sonst geht's bei GetTempPath() auch net. Ich aktualisier mal den Wrapper.
Title: Re: strings???
Post by: Heiko on 2008-Jul-31
wo muss das "myStr.CalculateLen()" genau hin, poste mal ein beispiel, weil ich hab schon gewrappt und angepasst, nochmal wollt ich das nicht tun, so füge ich das von hand ein.
Title: Re: strings???
Post by: Kitty Hello on 2008-Jul-31
Nach dem Funktionsafruf. Du musst warten, bis der Wrapper alles automatisch richtig macht. Mit Hand hat das keinen Sinn. Besonder  nicht, wenn man sich net auskennt.
Title: Re: strings???
Post by: Heiko on 2008-Jul-31
kann ich nicht trotzdem einfach im declare : const char*  nehmen und in der funktion : Str.c_str()   ?

wenns damit keine probleme geben würde, würd ich das nämlich so nehmen, weil das mit dem converter im allg. noch net so funktioniert, und so würde ich das der einfachheit einfach austauschen.

oder könnte es da probleme geben?

und wenn ja, welcher art, weil dann könnte ich ja die betreffenden funktionen seperat aus einer convertierten decl übernehmen, und den rest beim alten lassen.

oder ich schick dir, wenn fertig einfach mal mein projekt per mail und du schaust mal rein, wär das okay?
Title: Re: strings???
Post by: Kitty Hello on 2008-Jul-31
Quote from: Kitty Hello on 2008-Jul-31
... keinen Sinn. Besonder  nicht, wenn man sich net auskennt.

Mach's mit dem Wrapper. Geht's ist's OK, geht's nicht, sag mir warum nicht. Ich hab keine Lust auf ein Gespräch, wo die andere Seite nur Bahnhof versteht. Wenn Du das Gespräch willst, dann lern C++, lern was der Unterschied von char* und const char* ist, dann können wir reden.
Title: Re: strings???
Post by: Heiko on 2008-Jul-31
naja ich weiß, dass es ein nicht konstanter pointer auf einen konstanten string ist.
wollte nur dich fragen, bevor ich mich belese, da du ja eh in der materie steckst.

mehr nicht.

das was nicht funktioniert momentan hat denke ich mal nichts damit zu tun.

egal, ich schreib die beiden wrapper erstmal von hand, sende dir dann die gbas und dazugehörige decl, damit solltest du schlussfolgerungen ziehen können.

ich wollt nur wissen, ob es da nen unterschied gibt zwischen konstant und nicht konstant innerhalb einer funktion, mehr nicht.
Title: Re: strings???
Post by: trucidare on 2008-Jul-31
Korrekt. C++ ist auch nicht so wild zu lernen und wenn man kein bock auf OGL in verbindung mit supereinfacher syntax und superleichten befehlen hat dann nimmt man halt c++ ansonsten ist man zufrieden mit dem was man da bekommt und ende. Ich mach auch viel mit c++ aber mecker nicht an GLB rum. Da glb voll spaß macht und nicht auf iso standard programmier techniken besteht nehm ich für kleine schnelle sachen glb ansonsten c++. oder c++ um was f+r glb zu machen.

Erst wenn man wirklich ahnung hat dann darf man meckern vorher würd ich sagen einfach mal das nehmen was man bekommt.
Title: Re: strings???
Post by: BumbleBee on 2008-Jul-31
Genau. Also Heiko, kauf dir bitte ein Buch über C++. Da stehen die Antworten auf all deine Frage drin.

Cheers
Title: Re: strings???
Post by: Heiko on 2008-Jul-31
ich habe lediglich eine frage gestellt, was bitte war daran falsch zu verstehen?
Title: Re: strings???
Post by: BumbleBee on 2008-Jul-31
War auch nicht so gemeint. :) Gernot hat ja wenig Zeit. Vielleicht nicht so viel Fragen und Wünsche auf einmal. Eins nach dem anderen. Sonst läuft uns der noch weg. =D

Cheers
Title: Re: strings???
Post by: Heiko on 2008-Jul-31
wollt nur wissen ob das getstr usw. und len etc notwendig ist, oder ob ich bei meinem

Code (glbasic) Select
FUNCTION Xo_LoadMesh: path$, parent = 0
INLINE
    if(xLoadMesh)
      return xLoadMesh(path_Str.c_str(),parent);
ENDINLINE
ENDFUNCTION


bei allen strings bleiben kann, mehr nicht.
Title: Re: strings???
Post by: Kitty Hello on 2008-Jul-31
Ich kenne Deine Funktionen nicht alle. Und warum willst Du das jetzt immernoch mit der Hand wrappen, wo doch der decl Wrapper da ist?
:help:
Title: Re: strings???
Post by: Schranz0r on 2008-Jul-31
siehe Wrapper-thread ...
habs auch erfolgreich gewrappt... geht aber leider nicht.... (hatte ich aber mit meinen Wrapper auch Gernot. schlimm wars bei Pointern... :( )