SysFreeString called twice?
-
Hi @all,
ich mache seit lägerer Zeit mal wieder COM und dort wiedermal die häßlichen BSTR - Strings. Ich benutze aber lieber die Wrapper ala _bstr_t um mir das Aufräumen zu sparen.
angenommen ich habe eine Funktion:
void doSomeThing( BSTR strBlub ) { //assume something usefull would be done here... SysFreeString(strBlub); } { _bstr_t strString = "SomeString"; doSomeThing( strString ); }//here dtor of _bstr_t is called -> so I assume SysFreeString is called twice.....wie beschrieben : ist das legal? Zumindest funktioniert es. Ich habe auch selber mal versucht, was passiert, wenn ich, mehrmals SysFreeString aufrufe - offenbar ist das auch kein Problem. Leider ist die Doku zu SysFreeString sehr dürftig. Ein delete scheint es jedenfalls nicht zu machen

Danke und Viele Grüße,
Tobias
-
http://msdn2.microsoft.com/en-us/library/ms221481.aspx
=> If bstr is NULL, the function simply returns.
-
wunderbar, ist aber nix neues und hat mit meiner Frage wohl eher nichts zu tun. In dem Fall ist es eben nicht null.
folgendes Negativbeispiel funktioniert erschreckenderweise übrigens auch problemlos:
strProc[0] = 'T'; SysFreeString( strProc ); strProc[0] = 'K'; SysFreeString( strProc );
-
Du darfst sowas natürlich *nicht* machen!
Du kannst auch mal den Debug-Heap aktivieren (gflags.exe), der wird Dir vermutlich eine Exception um die Ohren werfen... (oder auch das Application-Compatibility-Toolkit).
-
d.h. also, das in dem Fall, wo in einer Komponente der BSTR intern mit SysFreeString freigegeben wird sind für mich die bstr_t und CComBSTR tabu und ich muß mit AllocSysString und Co. herumhantieren?
Wenn das halt so ist ist es halt so. Danke.