Ejemplo n.º 1
0
ITypeInfo *GetObjectTypeInfoEx(LCID lcid,REFIID iid)
{
	HRESULT hr;
	ITypeInfo **ppTypeInfo;
	if (iid==IID_IBands)
		ppTypeInfo=&g_bandsTypeLib;
	else if (iid==IID_IChildBands)
		ppTypeInfo=&g_childbandsTypeLib;
	else
		return NULL;

	if ((*ppTypeInfo)==NULL)
	{ //Try to load typelibrary
		ITypeLib *pTypeLib;
        ITypeInfo *pTypeInfoTmp;
        hr = LoadRegTypeLib(LIBID_PROJECT, 2, 0,lcid, &pTypeLib);
		if (FAILED(hr))
		{
			return NULL;
		}
		hr = pTypeLib->GetTypeInfoOfGuid(iid, &pTypeInfoTmp);
        *ppTypeInfo=pTypeInfoTmp;
		pTypeLib->Release();
	}

	if ((*ppTypeInfo)==NULL)
		return NULL;
	(*ppTypeInfo)->AddRef();
	return *ppTypeInfo;
}
//------------------------------------------------------------------------------
// CSimpleThermostatService::InitStdDispatch
//      Creates the standard dispatch object that will be used when IDispatch
//      is requested from this object. The UPnP device object will call this
//      function immediately after instantiation of this object.
//------------------------------------------------------------------------------
HRESULT CSimpleThermostatService::InitStdDispatch()
{
    HRESULT     hr          = S_OK;
    ITypeLib*   pTypeLib    = NULL;

    hr = LoadRegTypeLib(
        LIBID_SimpleThermostatDeviceLib,
        1,
        0,
        LANG_NEUTRAL,
        &pTypeLib
        );

    if( S_OK == hr )
    {
        hr = pTypeLib->GetTypeInfoOfGuid(
            __uuidof(ISimpleThermostat_UPnPService),
            &m_pTypeInfo
            );
        pTypeLib->Release();
    }

    if( S_OK == hr )
    {
        hr = CreateStdDispatch(
            reinterpret_cast<IUnknown*>(this),
            this,
            m_pTypeInfo,
            &m_pUnkStdDispatch
            );
    }

    return hr;
}// CSimpleThermostatService::InitStdDispatch
Ejemplo n.º 3
0
	CiTunesEventHandler()
	{
		m_dwRefCount=0;
		ITypeLib* pITypeLib = nullptr ;
		HRESULT hr = ::LoadRegTypeLib(LIBID_iTunesLib, 1, 5, 0x00, &pITypeLib) ;
		// Get type information for the interface of the object.
		hr = pITypeLib->GetTypeInfoOfGuid(DIID__IiTunesEvents, &m_pITypeInfo) ;
		pITypeLib->Release() ;
	}
Ejemplo n.º 4
0
PyObject *PyITypeLib::GetTypeInfoOfGuid(REFGUID guid)
{
	ITypeLib *pMyTypeLib = GetI(this);
	if (pMyTypeLib==NULL) return NULL;
	ITypeInfo *pti = NULL;
	PY_INTERFACE_PRECALL;
	HRESULT hr = pMyTypeLib->GetTypeInfoOfGuid(guid, &pti);
	PY_INTERFACE_POSTCALL;
	if (FAILED(hr))
		return PyCom_BuildPyException(hr, pMyTypeLib, IID_ITypeLib);
	return PyCom_PyObjectFromIUnknown(pti, IID_ITypeInfo);
}
static HRESULT maybeLoadTypeInfo()
{
	if (!m_pTypeInfo)
	{
		ITypeLib* ptl;
		if (SUCCEEDED( LoadRegTypeLib( LIBID_$$Safe_root$$, 1, 0, MAKELCID(0, SORT_DEFAULT), &ptl ) ))
		{
			ptl->GetTypeInfoOfGuid( IID_IControlSurface, &m_pTypeInfo );
			ptl->Release();
		}
		else
			return E_NOTIMPL;
	}
	return NOERROR;
}
Ejemplo n.º 6
0
STDMETHODIMP CJServer::GetTypeInfo(UINT itInfo, LCID lcid, ITypeInfo **ppITypeInfo)
{
    HRESULT     hr;
    ITypeLib   *pITypeLib;
    ITypeInfo **ppITI=NULL;

    if (0!=itInfo) return TYPE_E_ELEMENTNOTFOUND;

    if (NULL==ppITypeInfo) return E_POINTER;

    *ppITypeInfo=NULL;
    switch (PRIMARYLANGID(lcid))
    {
        case LANG_NEUTRAL:
        case LANG_ENGLISH:
            ppITI=&m_pITINeutral;
            break;

        default:
            return DISP_E_UNKNOWNLCID;
    }

    //Load a type lib if we don't have the information already.
    if (NULL==*ppITI)
    {
        hr=LoadRegTypeLib(jlibid, atoi(jversion), 0, PRIMARYLANGID(lcid), &pITypeLib);
        if (FAILED(hr)) return hr;

        //Got the type lib, get type info for the interface we want
        hr=pITypeLib->GetTypeInfoOfGuid(jiid, ppITI);
        pITypeLib->Release();
        if (FAILED(hr)) return hr;
	}

	// the type library is still loaded since we have an ITypeInfo from it.
    (*ppITI)->AddRef();
    *ppITypeInfo=*ppITI;
    return NOERROR;
}
Ejemplo n.º 7
0
bool EventSink::create()
{
  // Retrieve the type information for the _IiTiunesEvents base
  // Requesting iTunes COM SDK version 1.12
  VARIANT_BOOL compatible;
  HRESULT result = controller_->itunes_->CheckVersion(1, 12, &compatible);
  if (FAILED(result))
  {
    controller_->comError("Cannot query iTunes COM SDK version");
    return false;
  }

  if (!compatible)
  {
    controller_->comError("iTunes is not compatible with iTunes COM SDK version 1.12 (it is too old)");
    return false;
  }

  ITypeLib *typeLib = NULL ;
  result = ::LoadRegTypeLib(LIBID_iTunesLib, 1, 12, 0, &typeLib);
  if (FAILED(result))
  {
    controller_->comError("Could not load iTunes COM SDK version 1.12");
    return false;
  }

  result = typeLib->GetTypeInfoOfGuid(DIID__IiTunesEvents, &typeInfo_) ;
  typeLib->Release();
  if (FAILED(result))
  {
    controller_->comError("Could not retrieve iTunes COM SDK type info");
    return false;
  }

  return true;
}
Ejemplo n.º 8
0
ITypeInfo *tCOMUtil::GetDispatchTypeInfo(IDispatch* pdisp)
{
  ITypeInfo* typeinfo = NULL;

  HRESULT hr = pdisp->GetTypeInfo(0, LOCALE_SYSTEM_DEFAULT, &typeinfo);

  if(FAILED(hr))
    return NULL;

  TYPEATTR *ptypeattr = NULL;

  typeinfo->GetTypeAttr(&ptypeattr);

  TYPEKIND typekind = ptypeattr->typekind;

  if(typekind == TKIND_DISPATCH)
  {
    typeinfo->ReleaseTypeAttr(ptypeattr);
    return typeinfo;
  }

  // tries to find another description of the same
  // interface in the typelib with TKIND_DISPATCH

  ITypeLib *ptypelib = NULL;
  unsigned int dumb = 0;
  IID iid = ptypeattr->guid;

  hr = typeinfo->GetContainingTypeLib(&ptypelib, &dumb);

  typeinfo->ReleaseTypeAttr(ptypeattr);

  // if there's no containing type lib, we have to
  // trust this one is the right type info
  if(FAILED(hr))
    return typeinfo;

  // obtem a typeinfo do iid fornecido
  // caso haja uma implementacao dispinterface,
  // esta' e' que sera' retornada (segundo
  // documentacao do ActiveX

  ITypeInfo* typeinfo_guid = NULL;

  hr = ptypelib->GetTypeInfoOfGuid(iid, &typeinfo_guid);

  if(FAILED(hr))
  {
    ptypelib->Release();
    return typeinfo;
  }

  // verifica se e' dispinterface
  TYPEATTR *ptypeattr_iface = NULL;

  hr = typeinfo_guid->GetTypeAttr(&ptypeattr_iface);
  TYPEKIND typekind_iface = ptypeattr_iface->typekind;
  typeinfo_guid->ReleaseTypeAttr(ptypeattr_iface);

  if(typekind_iface == TKIND_DISPATCH)
  {
    // releases original type information
    COM_RELEASE(typeinfo);

    return typeinfo_guid;
  }
  else
  {
    COM_RELEASE(typeinfo_guid);
    
    // returns original type info
    return typeinfo;
  }
}
STDMETHODIMP
CBaseDispatch::GetTypeInfo(
  REFIID riid,
  UINT itinfo,
  LCID lcid,
  ITypeInfo ** pptinfo)
{
    CheckPointer(pptinfo,E_POINTER);
    ValidateReadWritePtr(pptinfo,sizeof(ITypeInfo *));
    HRESULT hr;

    *pptinfo = NULL;

    // we only support one type element
    if (0 != itinfo) {
	return TYPE_E_ELEMENTNOTFOUND;
    }

    if (NULL == pptinfo) {
	return E_POINTER;
    }

    // always look for neutral
    if (NULL == m_pti) {

	LPLOADTYPELIB	    lpfnLoadTypeLib;
	LPLOADREGTYPELIB    lpfnLoadRegTypeLib;
	ITypeLib	    *ptlib;
	HINSTANCE	    hInst;

	static const char  szTypeLib[]	  = "LoadTypeLib";
	static const char  szRegTypeLib[] = "LoadRegTypeLib";
	static const WCHAR szControl[]	  = L"control.tlb";

	//
	// Try to get the Ole32Aut.dll module handle.
	//

	hInst = LoadOLEAut32();
	if (hInst == NULL) {
	    DWORD dwError = GetLastError();
	    return AmHresultFromWin32(dwError);
	}
	lpfnLoadRegTypeLib = (LPLOADREGTYPELIB)GetProcAddress(hInst,
							      szRegTypeLib);
	if (lpfnLoadRegTypeLib == NULL) {
	    DWORD dwError = GetLastError();
	    return AmHresultFromWin32(dwError);
	}

	hr = (*lpfnLoadRegTypeLib)(LIBID_QuartzTypeLib, 1, 0, // version 1.0
				   lcid, &ptlib);

	if (FAILED(hr)) {

	    // attempt to load directly - this will fill the
	    // registry in if it finds it

	    lpfnLoadTypeLib = (LPLOADTYPELIB)GetProcAddress(hInst, szTypeLib);
	    if (lpfnLoadTypeLib == NULL) {
		DWORD dwError = GetLastError();
		return AmHresultFromWin32(dwError);
	    }

	    hr = (*lpfnLoadTypeLib)(szControl, &ptlib);
	    if (FAILED(hr)) {
		return hr;
	    }
	}

	hr = ptlib->GetTypeInfoOfGuid(
		    riid,
		    &m_pti);

	ptlib->Release();

	if (FAILED(hr)) {
	    return hr;
	}
    }

    *pptinfo = m_pti;
    m_pti->AddRef();
    return S_OK;
}
Ejemplo n.º 10
0
HRESULT ff::ComBaseEx::_GetClassInfo(ITypeInfo **typeInfo) const
{
	assertRetVal(typeInfo, E_INVALIDARG);
	ITypeLib *typeLib = _GetSourceModule().GetTypeLib(_GetTypeLibIndex());
	return typeLib != nullptr ? typeLib->GetTypeInfoOfGuid(_GetClassID(), typeInfo) : E_FAIL;
}