home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 27 / IOPROG_27.ISO / SOFT / ADSDK.ZIP / Samples / Provider / cprpobj.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1998-08-13  |  6.7 KB  |  353 lines

  1. /*++
  2.  
  3. Copyright (c) 1996 Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     CPrpObj.cpp
  8.  
  9. Abstract:
  10.  
  11.  
  12. Author:
  13.  
  14. Environment:
  15.  
  16.     User mode
  17.  
  18. Revision History :
  19.  
  20. --*/
  21. #include "adssmp.h"
  22. #pragma hdrstop
  23.  
  24. // Class CSampleDSProperty
  25.  
  26. DEFINE_IDispatch_Implementation(CSampleDSProperty)
  27. DEFINE_IADs_Implementation(CSampleDSProperty)
  28.  
  29. CSampleDSProperty::CSampleDSProperty()
  30.     : _pDispMgr( NULL ),
  31.       _bstrSyntax( NULL )
  32. {
  33.  
  34.     ENLIST_TRACKING(CSampleDSProperty);
  35. }
  36.  
  37. CSampleDSProperty::~CSampleDSProperty()
  38. {
  39.     delete _pDispMgr;
  40. }
  41.  
  42. HRESULT
  43. CSampleDSProperty::CreateProperty(
  44.     BSTR   bstrParent,
  45.     BSTR   bstrName,
  46.     LPSampleDS_ATTR_DEF lpAttrDef,
  47.     DWORD  dwObjectState,
  48.     REFIID riid,
  49.     void **ppvObj
  50.     )
  51. {
  52.     CSampleDSProperty FAR * pProperty = NULL;
  53.     HRESULT hr = S_OK;
  54.     WCHAR szADsSyntax[MAX_PATH];
  55.     WCHAR szSampleDSSyntax[MAX_PATH];
  56.  
  57.     hr = AllocatePropertyObject( &pProperty );
  58.     BAIL_ON_FAILURE(hr);
  59.  
  60.     hr = pProperty->InitializeCoreObject(
  61.              bstrParent,
  62.              bstrName,
  63.              PROPERTY_CLASS_NAME,
  64.              L"",
  65.              CLSID_SampleDSProperty,
  66.              dwObjectState
  67.              );
  68.     BAIL_ON_FAILURE(hr);
  69.  
  70.     hr = pProperty->QueryInterface( riid, ppvObj );
  71.     BAIL_ON_FAILURE(hr);
  72.  
  73.     MapSyntaxIdtoADsSyntax(
  74.             lpAttrDef->dwSyntaxID,
  75.             szADsSyntax
  76.             );
  77.  
  78.     hr = ProvAllocString(
  79.                 szADsSyntax,
  80.                 &pProperty->_bstrSyntax
  81.                 );
  82.     BAIL_ON_FAILURE(hr);
  83.  
  84.     MapSyntaxIdtoSampleDSSyntax(
  85.             lpAttrDef->dwSyntaxID,
  86.             szSampleDSSyntax
  87.             );
  88.     
  89.     pProperty->Release();
  90.  
  91.     RRETURN(hr);
  92.  
  93. error:
  94.  
  95.     delete pProperty;
  96.     RRETURN(hr);
  97. }
  98.  
  99. HRESULT
  100. CSampleDSProperty::CreateProperty(
  101.     BSTR   bstrParent,
  102.     BSTR   bstrName,
  103.     HANDLE hTree,
  104.     DWORD  dwObjectState,
  105.     REFIID riid,
  106.     void **ppvObj
  107.     )
  108. {
  109.     DWORD dwStatus = 0;
  110.     HRESULT hr = S_OK;
  111.     LPSampleDS_ATTR_DEF lpAttrDefs = NULL;
  112.     DWORD dwNumberOfEntries = 0;
  113.     DWORD dwInfoType = 0;
  114.     HANDLE hOperationData = NULL;
  115.     hr = SampleDSGetPropertyDefinition(&lpAttrDefs,
  116.                                        bstrName);
  117.     BAIL_ON_FAILURE(hr);
  118.  
  119.     if (!lpAttrDefs) {
  120.         hr = E_FAIL;
  121.         BAIL_ON_FAILURE(hr);
  122.     }
  123.  
  124.     hr = CSampleDSProperty::CreateProperty(
  125.                 bstrParent,
  126.                 bstrName,
  127.                 lpAttrDefs,
  128.                 dwObjectState,
  129.                 riid,
  130.                 ppvObj
  131.                 );
  132. error:
  133.     if (lpAttrDefs)
  134.         SampleDSFreePropertyDefinition(lpAttrDefs,
  135.                                        1
  136.                                       );
  137.     RRETURN(hr);
  138. }
  139.  
  140. STDMETHODIMP
  141. CSampleDSProperty::QueryInterface(
  142.     REFIID iid,
  143.     LPVOID FAR* ppv
  144.     )
  145. {
  146.     if (IsEqualIID(iid, IID_IUnknown))
  147.     {
  148.         *ppv = (IADsProperty FAR *) this;
  149.     }
  150.     else if (IsEqualIID(iid, IID_IDispatch))
  151.     {
  152.         *ppv = (IADsProperty FAR *) this;
  153.     }
  154.     else if (IsEqualIID(iid, IID_IADsProperty))
  155.     {
  156.         *ppv = (IADsProperty FAR *) this;
  157.     }
  158.     else if (IsEqualIID(iid, IID_IADs))
  159.     {
  160.         *ppv = (IADsProperty FAR *) this;
  161.     }
  162.     else
  163.     {
  164.         *ppv = NULL;
  165.         return E_NOINTERFACE;
  166.     }
  167.  
  168.     AddRef();
  169.     return NOERROR;
  170. }
  171.  
  172. /* IADs methods */
  173.  
  174. STDMETHODIMP
  175. CSampleDSProperty::SetInfo(THIS)
  176. {
  177.     RRETURN(E_NOTIMPL);
  178. }
  179.  
  180. STDMETHODIMP
  181. CSampleDSProperty::GetInfo(THIS)
  182. {
  183.     RRETURN(S_OK);
  184. }
  185.  
  186.  
  187. HRESULT
  188. CSampleDSProperty::AllocatePropertyObject(
  189.     CSampleDSProperty FAR * FAR * ppProperty
  190.     )
  191. {
  192.     CSampleDSProperty FAR *pProperty = NULL;
  193.     CDispatchMgr FAR *pDispMgr = NULL;
  194.     HRESULT hr = S_OK;
  195.  
  196.     pProperty = new CSampleDSProperty();
  197.     if ( pProperty == NULL )
  198.         hr = E_OUTOFMEMORY;
  199.     BAIL_ON_FAILURE(hr);
  200.  
  201.     pDispMgr = new CDispatchMgr;
  202.     if ( pDispMgr == NULL )
  203.         hr = E_OUTOFMEMORY;
  204.     BAIL_ON_FAILURE(hr);
  205.  
  206.     hr = LoadTypeInfoEntry(
  207.             pDispMgr,
  208.             LIBID_ADs,
  209.             IID_IADsProperty,
  210.             (IADsProperty *) pProperty,
  211.             DISPID_REGULAR
  212.             );
  213.     BAIL_ON_FAILURE(hr);
  214.  
  215.     pProperty->_pDispMgr = pDispMgr;
  216.     *ppProperty = pProperty;
  217.  
  218.     RRETURN(hr);
  219.  
  220. error:
  221.  
  222.     delete pDispMgr;
  223.     delete pProperty;
  224.  
  225.     RRETURN(hr);
  226.  
  227. }
  228.  
  229.  
  230. STDMETHODIMP
  231. CSampleDSProperty::Get(
  232.     THIS_ BSTR bstrName,
  233.     VARIANT FAR* pvProp
  234.     )
  235. {
  236.     RRETURN(E_NOTIMPL);
  237. }
  238.  
  239.  
  240.  
  241. STDMETHODIMP
  242. CSampleDSProperty::Put(
  243.     THIS_ BSTR bstrName,
  244.     VARIANT vProp
  245.     )
  246. {
  247.     RRETURN(E_NOTIMPL);
  248. }
  249.  
  250.  
  251. HRESULT
  252. MapSyntaxIdtoADsSyntax(
  253.     DWORD dwSyntaxId,
  254.     LPWSTR pszADsSyntax
  255.     )
  256. {
  257.  
  258.     if (dwSyntaxId > g_cSampleDSSyntaxMap) {
  259.         wcscpy(pszADsSyntax, L"Out of Bounds");
  260.     }else {
  261.         wcscpy(pszADsSyntax, g_aSampleDSSyntaxMap[dwSyntaxId - 1].bstrName);
  262.     }
  263.     RRETURN(S_OK);
  264.  
  265. }
  266.  
  267. HRESULT
  268. MapSyntaxIdtoSampleDSSyntax(
  269.     DWORD dwSyntaxId,
  270.     LPWSTR pszSampleDSSyntax
  271.     )
  272. {
  273.  
  274.     if (dwSyntaxId > g_cSampleDSSyntaxMap) {
  275.         wcscpy(pszSampleDSSyntax, L"Out of Bounds");
  276.     }else {
  277.         wcscpy(pszSampleDSSyntax, g_aSampleDSSyntaxMap[dwSyntaxId - 1].bstrSampleDSName);
  278.     }
  279.     RRETURN(S_OK);
  280.  
  281. }
  282. /* IADsProperty methods */
  283.  
  284. STDMETHODIMP
  285. CSampleDSProperty::get_OID( THIS_ BSTR FAR *pbstrOID )
  286. {
  287.     RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
  288. }
  289.  
  290. STDMETHODIMP
  291. CSampleDSProperty::put_OID( THIS_ BSTR bstrOID )
  292. {
  293.     RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
  294. }
  295.  
  296. STDMETHODIMP
  297. CSampleDSProperty::get_Syntax( THIS_ BSTR FAR *pbstrSyntax )
  298. {
  299.     if ( !pbstrSyntax )
  300.         RRETURN(E_ADS_BAD_PARAMETER);
  301.  
  302.     RRETURN( ProvAllocString( _bstrSyntax, pbstrSyntax ));
  303. }
  304.  
  305. STDMETHODIMP
  306. CSampleDSProperty::put_Syntax( THIS_ BSTR bstrSyntax )
  307. {
  308.     RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
  309. }
  310.  
  311. STDMETHODIMP
  312. CSampleDSProperty::get_MaxRange( THIS_ long FAR *plMaxRange )
  313. {
  314.     RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
  315. }
  316.  
  317. STDMETHODIMP
  318. CSampleDSProperty::put_MaxRange( THIS_ long lMaxRange )
  319. {
  320.     RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
  321. }
  322.  
  323. STDMETHODIMP
  324. CSampleDSProperty::get_MinRange( THIS_ long FAR *plMinRange )
  325. {
  326.     RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
  327. }
  328.  
  329. STDMETHODIMP
  330. CSampleDSProperty::put_MinRange( THIS_ long lMinRange )
  331. {
  332.     RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
  333. }
  334.  
  335. STDMETHODIMP
  336. CSampleDSProperty::get_MultiValued( THIS_ VARIANT_BOOL FAR *pfMultiValued )
  337. {
  338.     RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
  339. }
  340.  
  341. STDMETHODIMP
  342. CSampleDSProperty::put_MultiValued( THIS_ VARIANT_BOOL fMultiValued )
  343. {
  344.     RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
  345. }
  346.  
  347. STDMETHODIMP
  348. CSampleDSProperty::Qualifiers(THIS_ IADsCollection FAR* FAR* ppQualifiers)
  349. {
  350.     RRETURN(E_NOTIMPL);
  351. }
  352.     
  353.