ATL String zurückgeben.
-
Hallo Forum,
ich teste gerade ein bißchen mit ATL/COM, weil meine DLL auch unter Excel laufen soll. Wie kann ich einen Getter für einen String bauen?
STDMETHODIMP CAtlTest::GetString(BSTR* abc) { abc = new BSTR(L"Test"); // In Excel wird aber nicht Test ausgegeben. MessageBox(0, "Hallo", 0, 0); return S_OK; }Ich kann meine Klassen in Excel laden und die Funktionen aufrufen. Die Messagebox mit "Hallo" erscheint. Warum wird der String nicht zurückgegeben?
Den IDL Code habe ich mit dem VS.Net Assistenten gemacht. Die IDL Zeile sieht richtig aus:
[id(2), helpstring("method GetString")] HRESULT GetString([out,retval] BSTR* GetString);id(1) ist der dazugehörige Getter der korrekt einen String in meine DLL füllt. Was fehlt ist der Setter...
Vielen Dank
Bommel
-
Hab mich verpointert...
-
- BSTR sollest du mit SysAllocString, nicht mit new anlagen
- Das muß *abc = heissen
-
Ich habe mich an diesem Beispiel gehalten:
http://msdn2.microsoft.com/de-de/library/bdyd6xz6(VS.80).aspxHRESULT MyGoodFunction(/*[out]*/ BSTR* bstrStringPtr) { // Create the CComBSTR object CComBSTR bstrString("Hello World"); // Convert the string to uppercase bstrString.ToUpper(); // Return a copy of the string. return bstrString.CopyTo(bstrStringPtr); }