*.idl



  • 1. Code-Tags verwenden
    2. Da steht ja gar keine Funktion, womit Du Strings übergeben willst
    3. Die Funktion in Deinem interface besitzt keine Dispatch-ID!



  • geht es nicht das ich einfach eine variable deklarire?





  • kannst du mir vielleicht ein beispiel zeigen wie ich das realisieren kann.



  • interface IDokuV : IDispatch
    {
    [id(1), helpstring("method ShowDokuDlg")] HRESULT ShowDokuDlg(); 
    [id(2), helpstring("method GetString")] HRESULT GetString( BSTR* returnedString); 
    };
    
    class ATL_NO_VTABLE CDokuV : ...
    {
      // ...
      HRESULT ShowDokuDlg()
      {
        m_String = "Das ist ein TestString";
        return E_NOTIMPL;
      }
      CComBSTR m_String;
      HRESULT GetString( BSTR* returnedString)
      {
        return m_String.CopyTo( returnedString);
      }
    };
    


  • Danken erstmal. aber
    ich musste den qelltext etwas änder, weil entweder outlook mekerte oder c++
    und trotzdem kriege ich in outlook beim ausführen der zeilen
    Dim d As DOKUVERWALTUNGLib.DokuV
    Dim s As String
    Set d = New DOKUVERWALTUNGLib.DokuV
    d.ShowDokuDlg
    d.GetString (s)
    MsgBox s
    Set d = Nothing

    den text "Das ist ein TestString" nicht zurück
    /////////////////////////////////////////////////////////////////////////////
    // CDokuV

    STDMETHODIMP CDokuV::ShowDokuDlg()
    {
    m_String = "Das ist ein TestString";
    return 0;
    }

    STDMETHODIMP CDokuV::GetString(BSTR* returnedString)
    {
    return m_String.CopyTo( returnedString);
    }

    // DokuV.h : Deklaration von CDokuV

    #ifndef __DOKUV_H_
    #define __DOKUV_H_

    #include "resource.h" // Hauptsymbole
    #include "DokuVerwaltung1.h"

    /////////////////////////////////////////////////////////////////////////////
    // CDokuV
    class ATL_NO_VTABLE CDokuV :
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CDokuV, &CLSID_DokuV>,
    public IDispatchImpl<IDokuV, &IID_IDokuV, &LIBID_DOKUVERWALTUNGLib>
    {
    public:

    CDokuV()
    {
    }

    CComBSTR m_String;

    DECLARE_REGISTRY_RESOURCEID(IDR_DOKUV)

    DECLARE_PROTECT_FINAL_CONSTRUCT()

    BEGIN_COM_MAP(CDokuV)
    COM_INTERFACE_ENTRY(IDokuV)
    COM_INTERFACE_ENTRY(IDispatch)
    END_COM_MAP()

    // IDokuV
    public:
    STDMETHOD(ShowDokuDlg)();
    STDMETHOD(GetString)(BSTR* returnedString);
    };

    #endif //__DOKUV_H_



  • versuch mal das Interface so:

    interface IDokuV : IDispatch
    {
    [id(1), helpstring("method ShowDokuDlg")] HRESULT ShowDokuDlg(); 
    [id(2), helpstring("method GetString")] HRESULT GetString( [out,retval] BSTR* returnedString); 
    };
    


  • klappt trotzdem nicht.



  • Hm, habs mal im Makroeditor von VC getestet, bei mir geht's

    Dim d As Object
    Dim s As String
    d = CreateObject("DOKUVERWALTUNGLib.DokuV")
    d.GetString( s)
    MsgBox( s)
    


  • ich hab es in vba von outlook ausprobiert. da kamm eine fehlermeldung: Objekterstellung durch Active-X Komponente nicht möglich bei der Zeile
    'd =CreateObject("DOKUVERWALTUNGLib.DokuV")'



  • kannst Du das Projekt mal packen und mir zuschicken?


Anmelden zum Antworten