STD.IDL
//+------------------------------------------------------------------------ 
// 
//  OLEDBSimpleProvider interface 
// 
//  Copyright (C) Microsoft Corporation, 1993 - 1997. 
// 
//  File:       std.idl 
// 
//------------------------------------------------------------------------- 
 
//------------------------------------------------------------------------- 
// 
// This file is copied from IE4 build \ie\public\sdk\inc\simpdata.dil 
// 
//------------------------------------------------------------------------- 
 
//  Usage in MSDEV: 
// 
//  1. Select Tools/Customize 
//  2. Go to Tools tab. 
//  3. Click on Add... 
//  4. Type  MIDL.EXE  and click OK (or press ENTER) 
//  5. Fill in definition of a new tool as follows: 
//      Menu Text:      Compile &IDL file 
//      Command:        MIDL.EXE 
//      Arguments:      /ms_ext /char unsigned /c_ext $(FileName)$(FileExt) 
//      Initial Dir:    $(FileDir) 
//  6. Click on Close 
// 
//  Having done this, you can now use MSDEV to compile IDL files (such as 
//  this one).  Just open the file and select Tools/Compile IDL file. 
// 
//  Contact: tedsmith, jerryd, terrylu, or cfranks 
// 
//------------------------------------------------------------------------- 
 
//+------------------------------------------------------------------------ 
// 
//  OLEDBSimpleProvider interface 
// 
//  Copyright (C) Microsoft Corporation, 1993 - 1997. 
// 
//  File:       simpdata.idl 
// 
//------------------------------------------------------------------------- 
 
cpp_quote("//=--------------------------------------------------------------------------=") 
cpp_quote("// simpdata.h") 
cpp_quote("//=--------------------------------------------------------------------------=") 
cpp_quote("// (C) Copyright 1995-1997 Microsoft Corporation.  All Rights Reserved.") 
cpp_quote("//") 
cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF") 
cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO") 
cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A") 
cpp_quote("// PARTICULAR PURPOSE.") 
cpp_quote("//=--------------------------------------------------------------------------=") 
cpp_quote("") 
cpp_quote("#pragma comment(lib,\"uuid.lib\")") 
cpp_quote("") 
cpp_quote("//--------------------------------------------------------------------------") 
cpp_quote("// Simple Tabular Data.") 
cpp_quote("") 
cpp_quote("#ifndef SIMPDATA_H") 
cpp_quote("#define SIMPDATA_H") 
 
//import "ocidl.idl"; 
import "objidl.idl"; 
import "oleidl.idl"; 
import "oaidl.idl"; 
 
// We use signed integers for row and column numbers, starting with the value 1. 
// The value 0 refers to any "label" or "header" information, distinct from the 
// data.  The value -1 refers to any an unknown value, or all values, so, for 
// example, iRow = -1, iCol = 2 refers to all of column 2 
 
cpp_quote("#define OSP_IndexLabel      (0)") 
cpp_quote("#define OSP_IndexAll        (~0ul)") 
cpp_quote("#define OSP_IndexUnknown    (~0ul)") 
cpp_quote("") 
 
[ 
        uuid(E0E270C2-C0BE-11d0-8FE4-00A0C90A6341), 
        helpstring("OLE-DB Simple Provider Type Library"), 
        lcid(0x409), 
        version(1.4) 
] 
library std 
{ 
 
typedef enum OSPFORMAT 
{ 
    OSPFORMAT_RAW = 0,     // set/get variant as is 
    OSPFORMAT_DEFAULT = 0, // default is RAW 
    OSPFORMAT_FORMATTED = 1,   // all variants converted to string representation 
    OSPFORMAT_HTML = 2      // variant converted to HTML string representation 
                            // (providers not required to implement this). 
} OSPFORMAT; 
 
typedef enum OSPRW 
{ 
    // All cells are presumed to be readable. 
    OSPRW_DEFAULT = 1, 
    OSPRW_READONLY = 0,     // readonly 
    OSPRW_READWRITE = 1,    // readwrite 
    OSPRW_MIXED = 2         // mixed or unknown; most callers will treat 
                                     // as READWRITE "Lazy" provider should just 
                                     // return OSPRW_MIXED 
} OSPRW; 
 
typedef enum OSPFIND 
{ 
    OSPFIND_DEFAULT = 0, 
    OSPFIND_UP = 1,             // scan backwards(decreasing row #s) 
    OSPFIND_CASESENSITIVE = 2 
} OSPFIND; 
 
typedef enum OSPCOMP 
{ 
                            // These values derived from bitmasks 
                            // i.e.       GT  LT  EQ     
    OSPCOMP_EQ = 1,         // OSPCOMP_EQ          1 Equal 
    OSPCOMP_DEFAULT = 1,    // OSPCOMP_EQ is the default 
    OSPCOMP_LT = 2,         // OSPCOMP_LT      1   0 Less than 
    OSPCOMP_LE = 3,         // OSPCOMP_LE      1   1 Less than or equal 
    OSPCOMP_GE = 4,         // OSPCOMP_GT  1   0   0 Greater than or equal 
    OSPCOMP_GT = 5,         // OSPCOMP_GE  1   0   1 Greater than 
    OSPCOMP_NE = 6,         // OSPCOMP_NE  1   1   0 Not equal 
} OSPCOMP; 
 
typedef enum OSPXFER 
{ 
    OSPXFER_COMPLETE = 0, 
    OSPXFER_ABORT = 1, 
    OSPXFER_ERROR = 2 
} OSPXFER; 
 
[ 
        object, 
        uuid(E0E270C1-C0BE-11d0-8FE4-00A0C90A6341), 
        pointer_default(unique), 
        local, 
        version(1.4) 
] 
interface OLEDBSimpleProviderListener : IUnknown 
{ 
      // As noted above; a -1 (STD_IndexAll) can be used in the row or column 
      // (or both).  For example, CellChanged(STD_IndexAll, OSP_IndexAll) 
      // implies that all rows and columns changed shape. 
   
      HRESULT aboutToChangeCell([in] long iRow, [in] long iColumn); 
      HRESULT cellChanged([in] long iRow, [in] long iColumn); 
      HRESULT aboutToDeleteRows([in] long iRow, [in] long iColumn); 
      HRESULT deletedRows([in] long iRow, [in] long cRows); 
      HRESULT aboutToInsertRows([in] long iRow, [in] long cRows); 
      HRESULT insertedRows([in] long iRow, [in] long cRows); 
      HRESULT rowsAvailable([in] long iRow, [in] long cRows); 
      HRESULT transferComplete([in] OSPXFER xfer); 
} 
 
[ 
        object, 
        uuid(E0E270C0-C0BE-11d0-8FE4-00A0C90A6341), 
        pointer_default(unique), 
        local, 
        version(1.4) 
] 
interface OLEDBSimpleProvider : IUnknown 
{ 
      // Info-retrieving functions: 
      // ========================== 
      // 
      // Note that column names are retrieved using GetString or GetVariant 
      // with iRow == OSP_IndexLabel.  RWStatus for a whole row or column 
          // can be made with iRow or iColumn == OSP_IndexAll. 
 
      HRESULT getRowCount([out,retval] long *pcRows); 
      HRESULT getColumnCount([out,retval] long *pcColumns); 
 
 
      HRESULT getRWStatus([in] long iRow, [in] long iColumn, 
              [out, retval] OSPRW *prwStatus); 
 
      // Variant-oriented Get/Set: 
      // ========================= 
      // 
      // Note that use of VARIANT precludes references. 
 
      HRESULT getVariant([in] long iRow, [in] long iColumn, 
                         [in] OSPFORMAT format, [out, retval] VARIANT *pVar ); 
      HRESULT setVariant([in] long iRow, [in] long iColumn, 
                         [in] OSPFORMAT format, [in] VARIANT Var ); 
 
      // Locale information: 
      // =================== 
      // 
 
      HRESULT getLocale([out,retval] BSTR *pbstrLocale); 
 
      // Deletion and Insertion: 
      // ======================= 
      // 
      // For insertion, iRow or iColumn is index *before* which to insert; the 
      // first inserted row or column will end up with that index. 
      // 
      // In case of error, provider may choose to insert or delete only the 
      // first m of n rows or columns which client requested.  OUT parameter 
      // indicates how many rows or columns actually inserted or deleted.  In 
      // case of success, OUT parameter should be filled in with cRows. 
 
      HRESULT deleteRows([in] long iRow, [in] long cRows, 
             [out, retval] long *pcRowsDeleted ); 
      HRESULT insertRows([in] long iRow, [in] long cRows, 
             [out, retval] long *pcRowsInserted ); 
 
      // Find 
      // Find the first row in column iColumn that contains a value which 
      // matches val according to the compType. 
      // To continue searching past the found row, the caller should pass 
      // *piRowFound+1 as the next iRowStart, or *piRowFound-1 for backward 
      // searches (STDFIND_UP). 
 
      HRESULT find([in] long iRowStart, [in] long iColumn, 
                   [in] VARIANT val, 
                   [in] OSPFIND findFlags, 
                   [in] OSPCOMP compType, 
                   [out, retval] long *piRowFound ); 
 
      // Establish or detach single event sink. 
 
      HRESULT addOLEDBSimpleProviderListener([in] OLEDBSimpleProviderListener *pospIListener); 
      HRESULT removeOLEDBSimpleProviderListener([in] OLEDBSimpleProviderListener *pospIListener); 
 
      // Asynch support 
 
      HRESULT isAsync([out, retval] bool *pbAsynch); 
 
      HRESULT getEstimatedRows([out, retval] long *piRows); 
 
      // Stops any asynchronous download that may be in progress. 
      HRESULT stopTransfer(); 
} 
 
cpp_quote("typedef OLEDBSimpleProvider *LPOLEDBSimpleProvider;") 
 
} 
 
cpp_quote("#endif")