Com BSTR _bstr_t
-
Hi zusammen,
ich hoffe mir kann hier jemand helfen.
Ich habe eine Basic Exe die einige Funktionen zur Verfügung stellt.
Bei einer Funktionen gibt es eine, die über einen BSTR eingestellt werden.
z.B.
Postleitzahl(_bstr_t sOrt, long* lPlz)long lPlz; _exe->Postleitzahl((_bstr_t)"Berlin",&lPlz)Kann mir jemand sagen wieso das nicht Funktioniert?
Wenn ich es umschreibe:long lPlz; BSTR sOrt =(BSTR) SysAllocString(L"Berlin"); _exe->Postleitzahl(sOrt,&lPlz)dann funktioniert es.
Allerdings wenn ich dann danach SysFreeString(sOrt) aufrufe geht es wieder schief.
Gibt es hier eine Möglichkeit wie ich meinen Speicher anders wieder aufräumen kann?
Oder ist er schon wieder Frei gegeben?Gruß
Rocketbuehler
-
IMHO müsste es
_exe->Postleitzahl(_bstr_t("Berlin"),&lPlz)heißen!
-
Hi,
dies geht leider auch nicht.
_exe->Postleitzahl(_bstr_t("Berlin"),&lPlz)Ich habe auch
_exe->Postleitzahl(BSTR(L"Berlin"),&lPlz)
probiert und geht auch nicht.Eine Idee?
Gruß
Rocketbuehler
-
Hallo,
und was passiert, wenn du es so:
_bstr_t ort(L"Berlin"); _exe->Postleitzahl(ort,&lPlz);schreibst?
MfG,
Probe-Nutzer
-
Hi,
also da bricht er auch ab.
Immer an in der Datei "cmutil.h"
in der Funktioninline void _bstr_t::Data_t::_Free() throw()
-
Dann würde ich mal tippen, dass die Funktion die Du aufrufst Käse baut und den Zeiger zerstört oder freigibt...
-
Rocketbuehler schrieb:
Hi zusammen,
... long lPlz; BSTR sOrt =(BSTR) SysAllocString(L"Berlin"); _exe->Postleitzahl(sOrt,&lPlz)...
BSTR sOrt = SysAllocString(OLESTR("Berlin");Sollte ebenso wie dein Code funktionieren. Vielleicht stimmt die Signatur
der Funktion nicht, oder aber die Implementierung ist fehlerhaft. Du solltest
aber schon ordnungsgemäß prüfen, ob die Funktion auch erfolgreich war(HRESULT)
-
BSTRs sollten eigentlich nur freigegeben werden, wenn Sie als __out-Parameter definiert sind. _exe->Postleitzahl hält sich nicht dran und gibt den BSTR selbst frei.
Wie Martin schon sagte, der Fehler liegt in der aufgerufenen Funktion.