PARAM.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:4k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*************************************************************************
  2. **
  3. **  This is a part of the Microsoft Source Code Samples.
  4. **
  5. **  Copyright (C) 1992-1997 Microsoft Corporation. All rights reserved.
  6. **
  7. **  This source code is only intended as a supplement to Microsoft Development
  8. **  Tools and/or WinHelp documentation.  See these sources for detailed
  9. **  information regarding the Microsoft samples programs.
  10. **
  11. **  OLE Automation TypeLibrary Browse Helper Sample
  12. **
  13. **  param.cpp
  14. **
  15. **  CParameter implementation
  16. **
  17. **  Written by Microsoft Product Support Services, Windows Developer Support
  18. **
  19. *************************************************************************/
  20. #include <windows.h>
  21. #include <windowsx.h>
  22. #ifdef WIN16   
  23.   #include <ole2.h>
  24.   #include <compobj.h>    
  25.   #include <dispatch.h> 
  26.   #include <variant.h>
  27.   #include <olenls.h>  
  28. #endif 
  29. #include "browseh.h"  
  30. /*
  31.  * CParameter::Create
  32.  *
  33.  * Purpose:
  34.  *  Creates an instance of the Parameter automation object and initializes it.
  35.  *
  36.  * Parameters:   
  37.  *  ptinfo         TypeInfo in which the function of this parameter is contained.
  38.  *  bstrName       Name of parameter
  39.  *  ptypedesc      Type of parameter.
  40.  *  pidldesc       IDLDESC of parameter.
  41.  *  ppParameter    Returns Parameter automation object.
  42.  *
  43.  * Return Value:
  44.  *  HRESULT
  45.  *
  46.  */
  47. HRESULT 
  48. CParameter::Create(LPTYPEINFO ptinfo, BSTR bstrName, TYPEDESC FAR* ptypedesc, 
  49.      IDLDESC FAR* pidldesc, CParameter FAR* FAR* ppParameter) 
  50. {   
  51.     HRESULT hr;
  52.     CParameter FAR* pParameter = NULL; 
  53.     CTypeDesc FAR* pTypeDesc = NULL;
  54.      
  55.     *ppParameter = NULL;
  56.     
  57.     // Create object.
  58.     pParameter = new CParameter();
  59.     if (pParameter == NULL)
  60.     {
  61.         hr = E_OUTOFMEMORY; 
  62.         goto error;
  63.     }    
  64.    // Load type information for the object from type library. 
  65.     hr = pParameter->LoadTypeInfo(IID_IParameter);
  66.     if (FAILED(hr))
  67.         goto error; 
  68.     pParameter->m_bstrName = SysAllocString(bstrName);   
  69.     
  70.     // Parameter type.     
  71.     hr = CTypeDesc::Create(ptinfo, ptypedesc, &pTypeDesc);
  72.     if (FAILED(hr))
  73.         goto error;
  74.     pTypeDesc->QueryInterface(IID_IDispatch, (LPVOID FAR*)&pParameter->m_pdispTypeDesc);
  75.     
  76.     pParameter->m_wIDLFlags = pidldesc->wIDLFlags;
  77. #ifdef _DEBUG  
  78.     lstrcpyn(pParameter->m_szClassName, TEXT("Parameter"), 100);
  79. #endif
  80.         
  81.     *ppParameter = pParameter;
  82.     return NOERROR;
  83.     
  84. error:                        
  85.     if (pParameter == NULL) return E_OUTOFMEMORY;
  86.     
  87.     delete pParameter;
  88.     return hr;
  89. }
  90. /*
  91.  * CParameter::CParameter
  92.  *
  93.  * Purpose:
  94.  *  Constructor for CParameter object. Initializes members to NULL.
  95.  *
  96.  */
  97. CParameter::CParameter()
  98. {   
  99.     m_bstrName = NULL;  
  100.     m_pdispTypeDesc = NULL;
  101. }
  102. /*
  103.  * CParameter::~CParameter
  104.  *
  105.  * Purpose:
  106.  *  Destructor for CParameter object. 
  107.  *
  108.  */
  109. CParameter::~CParameter()
  110. {    
  111.      if (m_bstrName) SysFreeString(m_bstrName);
  112.      if (m_pdispTypeDesc) m_pdispTypeDesc->Release();
  113. }
  114. STDMETHODIMP_(REFCLSID)
  115. CParameter::GetInterfaceID()
  116. {
  117.     return IID_IParameter;
  118. }
  119. STDMETHODIMP_(BSTR)
  120. CParameter::get_Name()
  121. {
  122.     return SysAllocString(m_bstrName);
  123. }
  124. STDMETHODIMP_(ITypeDesc FAR*)
  125. CParameter::get_Type()
  126. {
  127.     m_pdispTypeDesc->AddRef();
  128.     return (ITypeDesc FAR*)m_pdispTypeDesc;
  129. STDMETHODIMP_(int)
  130. CParameter::get_IDLFlags()
  131. {
  132.     return (int)m_wIDLFlags;
  133. }
  134. STDMETHODIMP_(OBJTYPE)
  135. CParameter::get_Kind()
  136. {   
  137.     return TYPE_PARAMETER;
  138. }