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...



    1. BSTR sollest du mit SysAllocString, nicht mit new anlagen
    2. Das muß *abc = heissen


  • Ich habe mich an diesem Beispiel gehalten:
    http://msdn2.microsoft.com/de-de/library/bdyd6xz6(VS.80).aspx

    HRESULT 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);
    }
    

Anmelden zum Antworten