HRESULT CUIElement::GetName(BSTR* pbstrName)
{
	DEBUG_ASSERT(pbstrName) ;
	IF_RETURN(NULL == pbstrName, E_INVALIDARG) ;
	CComBSTR bstrName(this->m_cstrElementName) ;
	return bstrName.CopyTo(pbstrName) ;
}
示例#2
0
/**
 * @interface_method_impl{PDMIPCIRAWUP,pfnPciDeviceConstructComplete}
 */
DECLCALLBACK(int) PCIRawDev::drvDeviceConstructComplete(PPDMIPCIRAWCONNECTOR pInterface, const char *pcszName,
                                                        uint32_t uHostPCIAddress, uint32_t uGuestPCIAddress,
                                                        int rc)
{
    PDRVMAINPCIRAWDEV pThis = RT_FROM_CPP_MEMBER(pInterface, DRVMAINPCIRAWDEV, IConnector);
    Console *pConsole = pThis->pPCIRawDev->getParent();
    const ComPtr<IMachine>& machine = pConsole->machine();
    ComPtr<IVirtualBox> vbox;

    HRESULT hrc = machine->COMGETTER(Parent)(vbox.asOutParam());
    Assert(SUCCEEDED(hrc));

    ComPtr<IEventSource> es;
    hrc = vbox->COMGETTER(EventSource)(es.asOutParam());
    Assert(SUCCEEDED(hrc));

    Bstr bstrId;
    hrc = machine->COMGETTER(Id)(bstrId.asOutParam());
    Assert(SUCCEEDED(hrc));

    ComObjPtr<PCIDeviceAttachment> pda;
    BstrFmt bstrName(pcszName);
    pda.createObject();
    pda->init(machine, bstrName, uHostPCIAddress, uGuestPCIAddress, TRUE);

    Bstr msg("");
    if (RT_FAILURE(rc))
        msg = BstrFmt("runtime error %Rrc", rc);

    fireHostPCIDevicePlugEvent(es, bstrId.raw(), true /* plugged */, RT_SUCCESS(rc) /* success */, pda, msg.raw());

    return VINF_SUCCESS;
}
示例#3
0
   HRESULT GetElementById(const CString& cszId, CComPtr<IHTMLElement>& spElement)
   {
      CComPtr<IHTMLDocument2> spIHTMLDocument2;
      HRESULT hr = GetHtmlDocument(spIHTMLDocument2);
      if (FAILED(hr))
         return hr;

      CComPtr<IHTMLElementCollection> spIHTMLElementCollection;
      hr = spIHTMLDocument2->get_all(&spIHTMLElementCollection);
      if (FAILED(hr))
         return hr;

      CComBSTR bstrName(cszId);
      CComVariant varName(bstrName);
      CComVariant varIndex(static_cast<int>(0));

      CComPtr<IDispatch> spIDispatchIHTMLElement;
      hr = spIHTMLElementCollection->item(varName, varIndex, &spIDispatchIHTMLElement);
      if (FAILED(hr))
         return hr;

      if (spIDispatchIHTMLElement == NULL)
         return E_FAIL;

      return spIDispatchIHTMLElement.QueryInterface<IHTMLElement>(&spElement);
   }
示例#4
0
void CTangramExcelPlusWB::OnSheetActivate(IDispatch* Sh)
{
    CComQIPtr<Excel::_Worksheet> pSheet(Sh);
    if(pSheet)
    {
        CComBSTR bstrName(L"");
        pSheet->get_Name(&bstrName);
        CString strName = OLE2T(bstrName);
        CTangramXmlParse* pParse2 = GetChild(strName);
        if(pParse2==NULL)
            pParse2 = GetChild(_T("Default"));
        if(pParse2)
        {
            HWND hWnd = ::GetActiveWindow();
            HWND m_hClientWnd = ::FindWindowEx(hWnd,NULL,_T("XLDESK"),NULL);
            HWND m_hWorkBookWnd = (HWND) ::SendMessage(m_hClientWnd,WM_MDIGETACTIVE,0,0);
            CTangramExcelPlusWBWnd* pExcelWorkBookWnd = (CTangramExcelPlusWBWnd*)::SendMessage(m_hWorkBookWnd,WM_TANGRAMDATA,0,0);
            pExcelWorkBookWnd->m_strActiveSheetName = strName;
            CComPtr<ITangramNode> pNode;
            pExcelWorkBookWnd->m_pWorkBook->m_pFrame->Extend(bstrName, CComBSTR(pParse2->xml()), &pNode);
            // if(theApp.m_bOldVer)
            // {
            //   if(pExcelWorkBookWnd&&pExcelWorkBookWnd->m_pWorkBook->m_pFrame)
            //   {
            //pExcelWorkBookWnd->m_pWorkBook->m_pFrame->ModifyHost((LONGLONG)pExcelWorkBookWnd->m_pHeplerWnd->m_hWnd,(LONGLONG)pExcelWorkBookWnd->m_pHeplerWnd->m_pChild->m_hWnd);
            //         theApp.m_pTangramCore->NavigateXTML((LONGLONG)pExcelWorkBookWnd->m_pHeplerWnd->m_pChild->m_hWnd,CComBSTR(pParse2->xml()),&pNode);
            //pExcelWorkBookWnd->m_pWorkBook->m_pFrame->ModifyHost((LONGLONG)hWnd,(LONGLONG)m_hClientWnd);
            //    }
            // }
            // else
            //     theApp.m_pTangramManager->NavigateXTML((LONGLONG)m_hClientWnd,CComBSTR(pParse2->xml()),&pNode);
        }
    }
}
HRESULT MachineDebugger::getOSName(com::Utf8Str &aOSName)
{
    LogFlowThisFunc(("\n"));
    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    Console::SafeVMPtr ptrVM(mParent);
    HRESULT hrc = ptrVM.rc();
    if (SUCCEEDED(hrc))
    {
        /*
         * Do the job and try convert the name.
         */
        char szName[64];
        int vrc = DBGFR3OSQueryNameAndVersion(ptrVM.rawUVM(), szName, sizeof(szName), NULL, 0);
        if (RT_SUCCESS(vrc))
        {
            try
            {
                Bstr bstrName(szName);
                aOSName = Utf8Str(bstrName);
            }
            catch (std::bad_alloc)
            {
                hrc = E_OUTOFMEMORY;
            }
        }
        else
            hrc = setError(VBOX_E_VM_ERROR, tr("DBGFR3OSQueryNameAndVersion failed with %Rrc"), vrc);
    }
    return hrc;
}
示例#6
0
HRESULT XPCDispObject::COMCreateInstance(XPCCallContext & ccx, BSTR className,
                                         PRBool enforceSecurity,
                                         IDispatch ** result)
{
    NS_ENSURE_ARG_POINTER(result);
    // Turn the string into a CLSID
    _bstr_t bstrName(className);
    CLSID classID = CLSID_NULL;
    HRESULT hr = CLSIDFromString(bstrName, &classID);
    if(FAILED(hr))
        hr = CLSIDFromProgID(bstrName, &classID);
    if(FAILED(hr) || ::IsEqualCLSID(classID, CLSID_NULL))
        return hr;
    
    // If the caller cares about security do the necessary checks
    // This results in the object being instantiated, so we'll use
    // it
    if(enforceSecurity)
        return SecurityCheck(ccx, classID, result);
    
    CComPtr<IDispatch> disp;
#ifdef JAXER
	hr = disp.CoCreateInstance(classID, NULL, CLSCTX_SERVER);
#else
    hr = disp.CoCreateInstance(classID);
#endif /* JAXER */
    if(FAILED(hr))
        return hr;

    disp.CopyTo(result);

    return S_OK;
}
示例#7
0
/// \see http://stackoverflow.com/questions/324974/in-wia-how-can-i-add-my-program-in-the-program-list-of-acquiring-images-from-a
void App::RegisterWIAHandler(bool bRegister)
{
   CComPtr<IWiaDevMgr> spWiaDevMgr;
   HRESULT hr = spWiaDevMgr.CoCreateInstance(CLSID_WiaDevMgr,
      NULL,
      CLSCTX_LOCAL_SERVER);

   if (FAILED(hr))
      return;

   CComBSTR bstrCommandline(_T("\"") + Path::ModuleFilename() + _T("\" --open-wia \"%1\" \"%2\""));
   CComBSTR bstrName(CString(MAKEINTRESOURCE(IDR_MAINFRAME)));
   CComBSTR bstrDescription(CString(MAKEINTRESOURCE(IDR_WIA_DESC)));
   CComBSTR bstrIcon(Path::ModuleFilename() + _T(",0"));

   hr = spWiaDevMgr->RegisterEventCallbackProgram(
      bRegister ? WIA_REGISTER_EVENT_CALLBACK : WIA_UNREGISTER_EVENT_CALLBACK,
      NULL,
      &WIA_EVENT_DEVICE_CONNECTED,
      bstrCommandline,
      bstrName,
      bstrDescription,
      bstrIcon);

   // when this fails, the user isn't an elevated user
   if (FAILED(hr))
      AtlMessageBox(NULL, _T("Error registering/unregisterin WIA event! Are you administrator?"), IDR_MAINFRAME, MB_OK);
}
示例#8
0
/*! Provides deck name
// \param BSTR *pVal : 
*/
STDMETHODIMP CAxJpgCard::get_DeckName(BSTR *pVal)
{
	if (pVal)
	{
		CComBSTR bstrName("Piacentine");
		*pVal = (BSTR)bstrName;
	}

	return S_OK;
}
示例#9
0
long CXmlManager::GetSubNodeNumber( IXMLDOMNode* lpNode, LPCTSTR lpNodesName )
{
	CComPtr<IXMLDOMNodeList>	lpItemNewList;
	CComBSTR					bstrName(lpNodesName);
	long						iLength = 0;

	if ( !SUCCEEDED(lpNode->selectNodes( bstrName, &lpItemNewList) ) )
		return iLength;

	lpItemNewList->get_length(&iLength);
	return iLength;
}
STDMETHODIMP CVectorObject::Terminate()
{
#ifdef _DEBUG
	CComBSTR bstrName("n/a");

	if (m_pParent)
	{
		m_pParent->get_Name(&bstrName.m_str);

		VWTRACE(m_pWorld, "VWOBJECT", TRACE_ALLOCATION, "CVectorObject::Terminate, %s.%s, this 0x%0x\n", CString(bstrName), CString(m_bstrPropertyName), this);
	}
#endif

	CVectorObjectBase::Terminate();

	return S_OK;
}
示例#11
0
/*
	Function name	: CXML::CreateAttributeNode
	Description	    : 
	Return type		: bool 
	Argument        : IXMLDOMNode **pParentNode
	Argument        : CString csAttribute
	Argument        : CString csValue
	Tested			: Ok
*/
bool CXML::CreateAttributeNode(IXMLDOMNode **pParentNode,CString csAttribute,CString csValue)
{
	IXMLDOMNode * pNode = NULL;
	if(csAttribute.IsEmpty())
		return false;

	if(!(*pParentNode))
		return false;

	_variant_t vtNodeType((long)NODE_ATTRIBUTE);

	_bstr_t bstrName(csAttribute);
	_bstr_t bstrNameSpace("");

	m_hr = m_pXMLDoc->createNode(vtNodeType,bstrName,bstrNameSpace,&pNode);
	if(!SUCCEEDED(m_hr))
		return false;

	IXMLDOMNamedNodeMap * pAttributes = NULL;
	m_hr = (*pParentNode)->get_attributes(&pAttributes);
	
	if(!SUCCEEDED(m_hr) || !pAttributes)
	{
		pNode->Release();
		return false;
	}

	IXMLDOMNode *pNewNode = NULL;
	m_hr = pAttributes->setNamedItem(pNode,&pNewNode);

	pNode->Release();
	pAttributes->Release();
	if(!SUCCEEDED(m_hr) || !pNewNode)
		return false;

	
	_variant_t vtValue(csValue);
	m_hr =	pNewNode->put_nodeValue(vtValue);

	pNewNode->Release();
	if(!SUCCEEDED(m_hr) || !pNewNode)
		return false;

	return true;
}
示例#12
0
/*******************************************************************************
Function Name    : DefineUpdateWave
Input(s)         :  -
Output           :  -
Functionality    : This function defines waveform and updates existing.
Member of        : CWaveformSelectionDlg
Friend of        :  -
Author(s)        : K ArunKumar
Date Created     : 24.08.2010
Modification By  :
Modification on  :
*******************************************************************************/
void CWaveformSelectionDlg::DefineUpdateWave(CListCtrl* pListCtrl, UINT nMsgID,
        CString strSignalName, sWaveformInfo& objWaveInfo)
{
    if (pListCtrl->GetSelectionMark() != -1)
    {
        CString strSignalDetails;
        strSignalDetails.Format(_T("0x%x->%s"), nMsgID, strSignalName);

        //BSTR bstrName = (BSTR)strSignalDetails.GetBuffer(MAX_PATH);
        BSTR bstrName(L"");

        SignalDefiner_SetSignalDetails(bstrName);

        SignalDefiner_SetType((SIGNAL_TYPE)objWaveInfo.m_eSignalWaveType);
        SignalDefiner_SetAmplitude(objWaveInfo.m_fAmplitude);
        SignalDefiner_SetFrequency(objWaveInfo.m_fFrequency);
        SignalDefiner_SetSamplingTimePeriod(m_pWaveDataHandler->shGetSamplingTimePeriod());

        if ( SignalDefiner_ShowDlg() == IDOK )
        {
            SIGNAL_TYPE enSelSignalType;
            SignalDefiner_GetType(&enSelSignalType);
            objWaveInfo.m_eSignalWaveType = (eWAVEFORMTYPE)enSelSignalType;
            SignalDefiner_GetAmplitude(&objWaveInfo.m_fAmplitude);
            SignalDefiner_GetFrequency(&objWaveInfo.m_fFrequency);

            if(pListCtrl == &m_omListCtrlSignal)
            {
                m_pWaveDataHandler->bAddSignalToDefinedWavesList(nMsgID, strSignalName, objWaveInfo);
            }
            else
            {
                m_pWaveDataHandler->vSetSignalWavePatternDetails(nMsgID, strSignalName, objWaveInfo);
            }

            // Force a setting of sampling time period.typecast to remove compiler warning
            int nTimePeriod;
            SignalDefiner_GetSamplingTimePeriod(&nTimePeriod);
            m_pWaveDataHandler->vSetSamplingTimePeriod(nTimePeriod);
        }
        //Free the BSTR memory allocated
        ::SysFreeString(bstrName);
    }
}
/**
 * Handles the info sub-command.
 *
 * @returns Suitable exit code.
 * @param   pArgs               The handler arguments.
 * @param   pDebugger           Pointer to the debugger interface.
 */
static RTEXITCODE handleDebugVM_Info(HandlerArg *pArgs, IMachineDebugger *pDebugger)
{
    /*
     * Parse arguments.
     */
    const char    *pszInfo = NULL;
    const char    *pszArgs = NULL;
    RTGETOPTSTATE  GetState;
    RTGETOPTUNION  ValueUnion;
    int rc = RTGetOptInit(&GetState, pArgs->argc, pArgs->argv, NULL, 0, 2, RTGETOPTINIT_FLAGS_OPTS_FIRST);
    AssertRCReturn(rc, RTEXITCODE_FAILURE);

    while ((rc = RTGetOpt(&GetState, &ValueUnion)) != 0)
    {
        switch (rc)
        {
            case VINF_GETOPT_NOT_OPTION:
                if (!pszInfo)
                    pszInfo = ValueUnion.psz;
                else if (!pszArgs)
                    pszArgs = ValueUnion.psz;
                else
                    return errorTooManyParameters(&pArgs->argv[GetState.iNext - 1]);
                break;
            default:
                return errorGetOpt(rc, &ValueUnion);
        }
    }

    if (!pszInfo)
        return errorSyntax("Must specify info item to display");

    /*
     * Do the work.
     */
    com::Bstr bstrName(pszInfo);
    com::Bstr bstrArgs(pszArgs);
    com::Bstr bstrInfo;
    CHECK_ERROR2I_RET(pDebugger, Info(bstrName.raw(), bstrArgs.raw(), bstrInfo.asOutParam()), RTEXITCODE_FAILURE);
    RTPrintf("%ls", bstrInfo.raw());
    return RTEXITCODE_SUCCESS;
}
示例#14
0
// 设置属性值
int CBpXMLNode::SetAttribute(const wchar_t *szAttrName, const wchar_t *szAttrValue)
{
	if (m_pDOMNode == NULL || szAttrName == NULL || szAttrValue == NULL)
		return XML_ERROR;

	if (m_pDOMNode->GetnodeType() != MSXML2::NODE_ELEMENT)
		return XML_ERROR;
	
	try
	{
		_bstr_t bstrName(szAttrName);
		MSXML2::IXMLDOMElementPtr pElemt = (MSXML2::IXMLDOMElementPtr)m_pDOMNode;
		pElemt->setAttribute(_bstr_t(szAttrName),_variant_t(szAttrValue));

	}
	catch (...)
	{
		return XML_ERROR;
	}
	return XML_OK;
}
示例#15
0
STDMETHODIMP CCoAutoRun::GetNativeLanguageName(
	__in int LocaleId, __deref_out BSTR* Name)
{
	TCHAR buffer[250] = {0};

	int n = GetLocaleInfo(
		static_cast<LCID>(LocaleId), 
		LOCALE_SNATIVELANGNAME,
		buffer,
		RTL_NUMBER_OF(buffer));

	if (0 == n)
	{
		return HRESULT_FROM_WIN32(GetLastError());
	}

	CComBSTR bstrName(buffer);
	*Name = bstrName.Detach();

	return S_OK;
}
示例#16
0
HRESULT CBasePropSetter::FindVal(const TCHAR* szName, BSTR *pbstrVal)
{
    CComBSTR bstrName(szName);

    deque<CComBSTR>::iterator prop_iter, val_iter;
    
    val_iter = value_list.begin();
    
    for (prop_iter = prop_list.begin(); 
         prop_iter != prop_list.end(); 
         ++prop_iter, ++val_iter)
    {
        if ((*prop_iter) == bstrName)
        {
            *pbstrVal = (*val_iter).Copy();
            return S_OK;
        }
    }

    *pbstrVal = 0;
    return E_FAIL;
}
STDMETHODIMP MachineDebugger::COMGETTER(OSName)(BSTR *a_pbstrName)
{
    LogFlowThisFunc(("\n"));
    CheckComArgNotNull(a_pbstrName);
    AutoCaller autoCaller(this);
    HRESULT hrc = autoCaller.rc();
    if (SUCCEEDED(hrc))
    {
        AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
        Console::SafeVMPtr ptrVM(mParent);
        hrc = ptrVM.rc();
        if (SUCCEEDED(hrc))
        {
            /*
             * Do the job and try convert the name.
             */
            char szName[64];
            int vrc = DBGFR3OSQueryNameAndVersion(ptrVM.raw(), szName, sizeof(szName), NULL, 0);
            if (RT_SUCCESS(vrc))
            {
                try
                {
                    Bstr bstrName(szName);
                    bstrName.detachTo(a_pbstrName);
                }
                catch (std::bad_alloc)
                {
                    hrc = E_OUTOFMEMORY;
                }
            }
            else
                hrc = setError(VBOX_E_VM_ERROR, tr("DBGFR3OSQueryNameAndVersion failed with %Rrc"), vrc);
        }
    }
    return hrc;
}
/**
 * Handles the setregisters sub-command.
 *
 * @returns Suitable exit code.
 * @param   pArgs               The handler arguments.
 * @param   pDebugger           Pointer to the debugger interface.
 */
static RTEXITCODE handleDebugVM_SetRegisters(HandlerArg *pArgs, IMachineDebugger *pDebugger)
{
    /*
     * We take a list of register assignments, that is register=value.
     */
    ULONG                       idCpu = 0;
    com::SafeArray<IN_BSTR>     aBstrNames;
    com::SafeArray<IN_BSTR>     aBstrValues;

    RTGETOPTSTATE               GetState;
    RTGETOPTUNION               ValueUnion;
    static const RTGETOPTDEF    s_aOptions[] =
    {
        { "--cpu", 'c', RTGETOPT_REQ_UINT32 },
    };
    int rc = RTGetOptInit(&GetState, pArgs->argc, pArgs->argv, s_aOptions, RT_ELEMENTS(s_aOptions), 2, RTGETOPTINIT_FLAGS_OPTS_FIRST);
    AssertRCReturn(rc, RTEXITCODE_FAILURE);

    while ((rc = RTGetOpt(&GetState, &ValueUnion)) != 0)
    {
        switch (rc)
        {
            case 'c':
                idCpu = ValueUnion.u32;
                break;

            case VINF_GETOPT_NOT_OPTION:
            {
                const char *pszEqual = strchr(ValueUnion.psz, '=');
                if (!pszEqual)
                    return errorSyntax("setregisters expects input on the form 'register=value' got '%s'", ValueUnion.psz);
                try
                {
                    com::Bstr bstrName(ValueUnion.psz, pszEqual - ValueUnion.psz);
                    com::Bstr bstrValue(pszEqual + 1);
                    if (   !aBstrNames.push_back(bstrName.raw())
                        || !aBstrValues.push_back(bstrValue.raw()))
                        throw std::bad_alloc();
                }
                catch (std::bad_alloc)
                {
                    RTMsgError("Out of memory\n");
                    return RTEXITCODE_FAILURE;
                }
                break;
            }

            default:
                return errorGetOpt(rc, &ValueUnion);
        }
    }

    if (!aBstrNames.size())
        return errorSyntax("The setregisters sub-command takes at least one register name");

    /*
     * If it is only one register, use the single register method just so
     * we expose it and can test it from the command line.
     */
    if (aBstrNames.size() == 1)
    {
        CHECK_ERROR2I_RET(pDebugger, SetRegister(idCpu, aBstrNames[0], aBstrValues[0]), RTEXITCODE_FAILURE);
        RTPrintf("Successfully set %ls\n", aBstrNames[0]);
    }
    else
    {
        CHECK_ERROR2I_RET(pDebugger, SetRegisters(idCpu, ComSafeArrayAsInParam(aBstrNames), ComSafeArrayAsInParam(aBstrValues)),
                          RTEXITCODE_FAILURE);
        RTPrintf("Successfully set %u registers\n", aBstrNames.size());
    }

    return RTEXITCODE_SUCCESS;
}
示例#19
0
stdex::tString CSystemInfo::GetWmiInfo( LPCTSTR lpszQuery, LPCTSTR lpszField )
{	
	CComPtr<IWbemLocator>  pIWbemLocator;
	CComPtr<IWbemServices> pWbemServices;
	stdex::tString   strValue;

	HRESULT hr = CoInitialize(NULL);
	hr = CoInitializeSecurity( NULL, -1, NULL,	NULL, RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0);
	if (hr != S_OK && hr != RPC_E_TOO_LATE)
	{
		CoUninitialize();
		return strValue;
	}

	if(CoCreateInstance (CLSID_WbemAdministrativeLocator, NULL,	CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, \
		IID_IUnknown , reinterpret_cast<void**>(&pIWbemLocator.p)) == S_OK)
    {
        if (pIWbemLocator->ConnectServer(BSTR(L"root\\cimv2"),  \
		    NULL, NULL, NULL, 0, NULL, NULL, &pWbemServices.p) == S_OK)
	    {
		    CComPtr<IEnumWbemClassObject> pEnumObject;
            hr = pWbemServices->ExecQuery(_bstr_t("WQL"), _bstr_t(lpszQuery),WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumObject.p);
            if(FAILED(hr))
            {
                CoUninitialize();
                return strValue;
            }

		    hr = pEnumObject->Reset();
            if(FAILED(hr))
            {
                CoUninitialize();
                return strValue;
            }

            CComPtr<IWbemClassObject> pClassObject;

            ULONG uCount = 1, uReturned = 0;
		    hr = pEnumObject->Next(C_WAIT_WMI_TIME, uCount, &pClassObject.p, &uReturned);
		    if (SUCCEEDED(hr) && pClassObject != NULL)
		    {
			    do
			    {
                    assert(pClassObject != NULL);
				    CComVariant varValue ;
				    _bstr_t bstrName(lpszField);
				    if( pClassObject->Get( bstrName ,0 ,&varValue ,NULL ,0 ) == S_OK )
				    {
					    if(varValue.vt == VT_NULL || varValue.vt == VT_EMPTY || varValue.vt == VT_ERROR)   
						    break;
					    _bstr_t b;
					    if( varValue.vt & VT_BSTR )
					    {
						    b = &varValue;
						    strValue = stdex::tString(b);
					    }
					    else if( varValue.vt & VT_ARRAY )
					    {
						    long iLowBound = 0 , iUpBound = 0 ;
						    SafeArrayGetLBound( varValue.parray , 1 , &iLowBound ) ;
						    SafeArrayGetUBound( varValue.parray , 1 , &iUpBound ) ;
						    for( long j = iLowBound ; j <= iUpBound ; j ++ )
						    {
							    VARIANT *pvar = NULL ;
							    long temp = j ;
							    if( SafeArrayGetElement( varValue.parray , &temp , pvar ) == S_OK &&
								    pvar )
							    {
								    CComVariant varTemp ;
								    if( varTemp.ChangeType( VT_BSTR , pvar ) == S_OK )
								    {
									    if(!strValue.empty())
										    strValue += TEXT(",");
									    b = &varTemp;
									    strValue += stdex::tString(b) ;
								    }                                                                
							    }
						    }
					    }
					    else
					    {
						    if( varValue.ChangeType( VT_BSTR ) == S_OK )
						    {
							    b = &varValue;
							    strValue += stdex::tString(b) ;
						    }					
					    }
				    }
			    } while (FALSE);
		    }
	    }
    }

	CoUninitialize();   
	return strValue;
}
示例#20
0
/*
	 Function name		: CXML::CreateElement
	 Description	    : This function create an element node set it as the current Node
						: with attributes and value and the text supplied 
	 Return type		: bool 
	 Argument			: IXMLDOMNode **ppRemoveNode
 */	
bool CXML::CreateElement(CString csTagName,LPCTSTR lpszText,char ** ppAttributes,char ** ppValues,int nNoOfAttributes,bool bSetAsCurNode)
{
	IXMLDOMNode * pNode = NULL;
	if(csTagName.IsEmpty())
		return false;

	if(!m_pICurrentNode)
		return false;

	_variant_t vtNodeType((long)NODE_ELEMENT);
	_bstr_t bstrName(csTagName);
	_bstr_t bstrNameSpace("");

	m_hr = m_pXMLDoc->createNode(vtNodeType,bstrName,bstrNameSpace,&pNode);
	if(!SUCCEEDED(m_hr))
		return false;

	if(m_pINewElement)
	{
		m_pINewElement->Release();
		m_pINewElement = NULL;
	}


	if(!AddNode(&m_pICurrentNode,&pNode,&m_pINewElement,NODE_ELEMENT))
	{
		pNode->Release();
		return false;
	} 

	if(!m_pINewElement)
		return false;

	if(lpszText)
	{
		_bstr_t bstrData(lpszText);

		m_hr = pNode->put_text(bstrData);
		if(!SUCCEEDED(m_hr))
		{
			pNode->Release();
			return false;
		}
	}

	pNode->Release();

	if(nNoOfAttributes && ppAttributes && ppValues )
	{
		for(int i = 0;i<nNoOfAttributes;++i)
		{
			if(!CreateAttributeNode(&m_pINewElement,ppAttributes[i],ppValues[i]))
				return false;
		}
	}

	if(bSetAsCurNode)
	{
		if(m_pICurrentNode)
		{
			m_pICurrentNode->Release();
			m_pICurrentNode = NULL;

		}
		m_pICurrentNode = m_pINewElement;
		m_pICurrentNode->AddRef();
	}
	return true;
}
		//begin CTangramOutLookPlusNavigationPaneEvents_12:
		void CTangramOutLookPlusExplorer::OnModuleSwitch(NavigationModule* pCurrentModule)
		{
			CComQIPtr<_NavigationModule> _pNavigationModule((_NavigationModule*)pCurrentModule);
			if (m_pNavigationGroups)
			{
				HRESULT hr = ((CTangramOutLookPlusNavigationGroupsEvents_12*)this)->DispEventUnadvise(m_pNavigationGroups);
				m_pNavigationGroups->Release();
				m_pNavigationGroups = NULL;
				m_pCurrentModule->Release();
				m_pCurrentModule = _pNavigationModule.p;
				m_pCurrentModule->AddRef();
			}

			if (_pNavigationModule)
			{
				HRESULT hr = _pNavigationModule->get_NavigationModuleType(&m_nNType);
				CComBSTR bstrName("");
				switch (m_nNType)
				{
				case olModuleMail:
				{
					CComQIPtr<_MailModule> _pModule(m_pCurrentModule);
					if (_pModule)
						_pModule->get_NavigationGroups(&m_pNavigationGroups);
				}
				break;
				case olModuleCalendar:
				{
					CComQIPtr<_CalendarModule> _pModule(m_pCurrentModule);
					if (_pModule)
						_pModule->get_NavigationGroups(&m_pNavigationGroups);
				}
				break;
				case olModuleContacts:
				{
					CComQIPtr<_ContactsModule> _pModule(m_pCurrentModule);
					if (_pModule)
						_pModule->get_NavigationGroups(&m_pNavigationGroups);
				}
				break;
				case olModuleTasks:
				{
					CComQIPtr<_TasksModule> _pModule(m_pCurrentModule);
					if (_pModule)
						_pModule->get_NavigationGroups(&m_pNavigationGroups);
				}
				break;
				case olModuleJournal:
				{
					CComQIPtr<_JournalModule> _pModule(m_pCurrentModule);
					if (_pModule)
						_pModule->get_NavigationGroups(&m_pNavigationGroups);
				}
				break;
				case olModuleNotes:
				{
					CComQIPtr<_NotesModule> _pModule(m_pCurrentModule);
					if (_pModule)
						_pModule->get_NavigationGroups(&m_pNavigationGroups);
				}
				break;
				case olModuleFolderList:
				case olModuleShortcuts:
				case olModuleSolutions:
					break;
				}
				if (m_nNType == olModuleSolutions)
				{
					//if (::IsChild(m_hWnd, theApp.m_pSolutionHelperWnd->m_hWnd) == false)
					//{
					//	::SetParent(theApp.m_pSolutionHelperWnd->m_hWnd, m_hWnd);
					//	theApp.m_pSolutionFrame->ModifyHost((LONGLONG)m_pTangramSolutionHostWnd->m_hWnd, (LONGLONG)m_hNavWnd);
					//}
					//if (m_hNavWnd&&theApp.m_pSolutionFrame)
					//{
					//	if (theApp.m_pSolutionHelperWnd&&::IsWindow(theApp.m_pSolutionHelperWnd->m_hWnd))
					//		::ShowWindow(theApp.m_pSolutionHelperWnd->m_hWnd, SW_SHOW);
					//	if (m_hButton)
					//		::ShowWindow(m_hButton, SW_HIDE);
					//	theApp.m_pSolutionFrame->Attach();
					//}
				}
				else
				{
					//if (m_hNavWnd&&theApp.m_pSolutionFrame)
					//{
					//	if (theApp.m_pSolutionHelperWnd&&::IsWindow(theApp.m_pSolutionHelperWnd->m_hWnd))
					//		::ShowWindow(theApp.m_pSolutionHelperWnd->m_hWnd, SW_HIDE);
					//	if (m_hButton)
					//		::ShowWindow(m_hButton, SW_SHOW);
					//	theApp.m_pSolutionFrame->Deatch();
					//}
				}
				if (m_pNavigationGroups)
				{
					m_pNavigationGroups->AddRef();
					hr = ((CTangramOutLookPlusNavigationGroupsEvents_12*)this)->DispEventAdvise(m_pNavigationGroups);
				}
			}
		}