R
Dann würd ich mir doch lieber eine einzige Konvertierungsfunktion schreiben.
Deswegen bin ich auf die "loesung" mit den Funktionen gekommen ...
Ich bekomm nen zeiger auf nen BSTR, allociert, fuer den bin ich verantwortlich.
Ok, ich hab/brauch ne funktion ... die mir das Teil in nen Tchar umwandelt.
Speicher allocieren, ist auch kein problem ... ich bekomm nen Zeiger auf nen Allocierten Tchar. bin ich auch fuer verantwortlich ...
Als Stringklasse wollt ich std::basic_string<TCHAR> nehmen ... das doofe, die hat kein Attach() und Detach(), sprich ich kann allokierte Zeiger nicht einfach uebernehmen (was ja auch ned sinn der std strings ist )... also kopier ich nochmal ???
und muss 2 strings wieder freigeben .. fand ich unschoen.
Ne alternative waeren die Consversations-Makros ... die gaengen sogar ziemlich einfach zu benutzen ...
basic_string<TCHAR> myTstring = OLE2T(myBSTR);
nu brauch ich nur 1 mal freigeben , den BSTR wieder
Nur was das Makro draus macht ... ist auch ned feierlich ... es wird lokal irgendwie nen buffer angelegt, wo das makro dann nen stirng drin erzeugt und dir nen constanten Zeiger drauf zurueckgibt ...
M$ warnt auch selber for ausgiebigen gebrauch dieser Dinge, sie tun manchmal ned immer dass ... deshalb sollte man sie auch nur lokal in functionen mit kurzen scope und niemals viele dieser makros im selben scope aufrufen. Stand irgendwann mal in so nem MSDN Workaround.
Zusaetzliche Motivation war fuer mich auch, den resultwert der COM funktion immer gleich mitabzufangen. Wenn der Reuckgabewert nicht ok ist, garantieren die COM funktionen fuer nix was an der uebergebenen adresse steht. normal sollte zwar NULL drinn stehen ... Deshalb hab ich die Rudimentaere fehlerbahndlung fuer die COmfehler und das Initialiseren der Strings gern in so einer funktion gehabt ...
Der arbeitsaufwand fuer das Ableiten jeder Schnittselle war meiner meinung nach nicht wesentlich viel arbeit mehr als jedesmal nen Fehler nach jedem funktionsaufruf abzufangen ... Wenn ich die schnittstellen ziemlich extensiv genutzt hab, hat sich das sogar gelohnt
Ciao ...