TDC.IDL
#include <olectl.h> 
// TDC.idl : IDL source for TDC.dll 
// 
 
// This file will be processed by the MIDL tool to 
// produce the type library (TDC.tlb) and marshalling code. 
 
#include "TDCIds.h" 
 
[ 
    uuid(761279e6-2dee-11d1-9544-00c04fb66f5d), 
    version(1.1), 
    helpstring("Tabular Data Control sample 1.1 Type Library") 
] 
library TDCLib 
{ 
    importlib("stdole32.tlb");  // don't remove this! 
 
 
    [ uuid(E0E270C0-C0BE-11d0-8FE4-00A0C90A6341), odl, dual] 
    interface OLEDBSimpleProviderX : IDispatch 
    { 
    }; 
 
    [ 
    object, 
        uuid(761279e8-2dee-11d1-9544-00c04fb66f5d), 
    dual, 
    helpstring("ITDCCtl Interface"), 
    pointer_default(unique) 
    ] 
 
 
    interface ITDCCtl : IDispatch 
    { 
 
    // Properties 
 
    [propget, id(DISPID_FIELDDELIM)] 
        HRESULT FieldDelim([out, retval] BSTR* pbstrFieldDelim); 
    [propput, id(DISPID_FIELDDELIM)] 
        HRESULT FieldDelim([in] BSTR bstrFieldDelim); 
 
    [propget, id(DISPID_ROWDELIM)] 
        HRESULT RowDelim([out, retval] BSTR* pbstrRowDelim); 
    [propput, id(DISPID_ROWDELIM)] 
        HRESULT RowDelim([in] BSTR bstrRowDelim); 
 
    [propget, id(DISPID_TEXTQUALIFIER)] 
        HRESULT TextQualifier([out, retval] BSTR* pbstrTextQualifier); 
    [propput, id(DISPID_TEXTQUALIFIER)] 
        HRESULT TextQualifier([in] BSTR bstrTextQualifier); 
 
    [propget, id(DISPID_ESCAPECHAR)] 
        HRESULT EscapeChar([out, retval] BSTR* pbstrEscapeChar); 
    [propput, id(DISPID_ESCAPECHAR)] 
        HRESULT EscapeChar([in] BSTR bstrEscapeChar); 
 
    [propget, id(DISPID_USEHEADER)] 
        HRESULT UseHeader([out, retval] VARIANT_BOOL* pfUseHeader); 
    [propput, id(DISPID_USEHEADER)] 
        HRESULT UseHeader([in] VARIANT_BOOL fUseHeader); 
 
    [propget, id(DISPID_SORTCOLUMN), hidden] 
        HRESULT SortColumn([out, retval] BSTR* pbstrSortColumn); 
    [propput, id(DISPID_SORTCOLUMN), hidden] 
        HRESULT SortColumn([in] BSTR bstrSortColumn); 
 
    [propget, id(DISPID_SORTASCENDING), hidden] 
        HRESULT SortAscending([out, retval] VARIANT_BOOL *pfSortAscending); 
    [propput, id(DISPID_SORTASCENDING), hidden] 
        HRESULT SortAscending([in] VARIANT_BOOL fSortAscending); 
 
    [propget, id(DISPID_FILTERVALUE), hidden] 
        HRESULT FilterValue([out, retval] BSTR* pbstrFilterValue); 
    [propput, id(DISPID_FILTERVALUE), hidden] 
        HRESULT FilterValue([in] BSTR bstrFilterValue); 
 
    [propget, id(DISPID_FILTERCRITERION), hidden] 
        HRESULT FilterCriterion([out, retval] BSTR* pbstrFilterCriterion); 
    [propput, id(DISPID_FILTERCRITERION), hidden] 
        HRESULT FilterCriterion([in] BSTR bstrFilterCriterion); 
 
    [propget, id(DISPID_FILTERCOLUMN), hidden] 
        HRESULT FilterColumn([out, retval] BSTR* pbstrFilterColumn); 
    [propput, id(DISPID_FILTERCOLUMN), hidden] 
        HRESULT FilterColumn([in] BSTR bstrFilterColumn); 
 
    [propget, id(DISPID_CHARSET)] 
        HRESULT CharSet([out, retval] BSTR *pbstrCharSet); 
    [propput, id(DISPID_CHARSET)] 
        HRESULT CharSet([in] BSTR bstrCharSet); 
 
    [propget, id(DISPID_LANGUAGE)] 
        HRESULT Language([out, retval] BSTR *pbstrLanguage); 
    [propput, id(DISPID_LANGUAGE)] 
        HRESULT Language([in] BSTR bstrLanguage); 
 
    [propget, id(DISPID_CASESENSITIVE)] 
        HRESULT CaseSensitive([out, retval] VARIANT_BOOL *pfCaseSensitive); 
    [propput, id(DISPID_CASESENSITIVE)] 
        HRESULT CaseSensitive([in] VARIANT_BOOL fCaseSensitive); 
 
    //  This will be tagged differently when we learn more about the HTML 
    //  sub-tag "OBJECT" 
    [propget, id(DISPID_DATAURL)] 
        HRESULT DataURL([out, retval] BSTR* pbstrDataURL); 
    [propput, id(DISPID_DATAURL)] 
        HRESULT DataURL([in] BSTR bstrDataURL); 
 
    [restricted, id(-3900)] 
    HRESULT msDataSourceObject([in] BSTR qualifier, 
                   [out, retval] IUnknown **ppUnk); 
 
    [restricted, id(-3901)] 
    HRESULT addDataSourceListener([in] IUnknown *pEvent); 
 
    // Methods 
 
    HRESULT Reset(); 
 
    // New properties/methods - put here to existing preserve vtable order 
 
// ;begin_internal 
#ifdef NEVER 
    [propget, id(DISPID_TIMER)] 
        HRESULT RefreshInterval([out, retval] LONG *plSecs); 
    [propput, id(DISPID_TIMER)] 
        HRESULT RefreshInterval([in] LONG lSecs); 
#endif 
// ;end_internal 
 
    [hidden, restricted] 
    HRESULT _OnTimer(); 
 
    [propget, id(DISPID_FILTER)] 
        HRESULT Filter([out, retval] BSTR* pbstrFilterExpr); 
    [propput, id(DISPID_FILTER)] 
        HRESULT Filter([in] BSTR bstrFilterExpr); 
 
    [propget, id(DISPID_SORT)] 
        HRESULT Sort([out, retval] BSTR* pbstrSortExpr); 
    [propput, id(DISPID_SORT)] 
        HRESULT Sort([in] BSTR bstrSortExpr); 
 
    [propget, id(DISPID_READYSTATE)] 
        HRESULT ReadyState([out, retval] long *state); 
    [propput, id(DISPID_READYSTATE)] 
        HRESULT ReadyState([in] long state); 
 
    [propget, id(DISPID_APPENDDATA)] 
        HRESULT AppendData([out, retval] VARIANT_BOOL *pfAppendData); 
    [propput, id(DISPID_APPENDDATA)] 
        HRESULT AppendData([in] VARIANT_BOOL fAppendData); 
 
    [propget, id(DISPID_OSP), hidden] 
        HRESULT OSP([out, retval] OLEDBSimpleProviderX ** ppISTD); 
    }; 
 
    [ 
        object, 
        uuid(761279e9-2dee-11d1-9544-00c04fb66f5d), 
        dual, 
    helpstring("Tabular Data Control Event interface"), 
        pointer_default(unique) 
    ] 
    interface ITDCCtlEvents: IDispatch 
    { 
        [id(DISPID_READYSTATECHANGE)] 
            void onreadystatechange(); 
    }; 
 
    [ 
        uuid(761279ea-2dee-11d1-9544-00c04fb66f5d), 
    helpstring("Tabular Data Control") 
    ] 
    coclass CTDCCtl 
    { 
    [default] interface ITDCCtl; 
        [default, source] interface ITDCCtlEvents; 
    }; 
 
 
};