Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]instanze com activex exe e c++

    Ciao.
    Per creare un instanza di un activex server com utilizzo il seguente codice:
    codice:
    CLSID clsid;    
            IUnknown *punk;   
            hr = CLSIDFromString(L"{827954DF-1EF3-4FFD-BEEB-CF0FB10E70B8}", &clsid);    
             //create an instance 
            hr =CoCreateInstance(clsid,NULL,CLSCTX_LOCAL_SERVER,IID_IUnknown, (void **)&punk) ;   
            hr= punk->QueryInterface(__uuidof(Sap2000::_SapObject), (void**)&m_pSap);   
               
            m_pSapModel = m_pSap->GetSapModel();   
            
            m_pSap->ApplicationStart(Sap2000::kN_m_C,TRUE,"file.sdb");
    Il problema è che se tento di creare una nuova instanza e c'è gia un instanza del com activex viene presa quella.
    Come posso fare a creare una nuova instanza come fosse la prima volta che avvio il com?
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Come crei le due istanze nel codice ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3

    Re: [c++]instanze com activex exe e c++

    Originariamente inviato da giuseppe500
    ...
    Il problema è che se tento di creare una nuova instanza e c'è gia un instanza del com activex viene presa quella.
    Come posso fare a creare una nuova instanza come fosse la prima volta che avvio il com?
    Grazie.
    Ciao Giuseppe,

    è così che funzionano i server com. Ogni volta che richiedi un'interfaccia tramite QueryInterface, se non c'è nessuna istanza attiva ne viene creata una e il conteggio dei riferimenti viene impostato a 1. Se chiamiamo un'altra volta QueryInterface su quel componente, non viene creata una nuova istanza ma viene incrementato il conteggio dei riferimenti(impostandolo a 2, nel nostro esempio).
    Chiamando Release, viene decrementato il conteggio dei riferimenti e, se questo viene azzerato, il componente viene scaricato dalla memoria.

    Perchè ti servono due istanze distinte dello stesso componente?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    vorrei avere due istanze perchè all'utente viene chiesto se
    1)agganciarsi ad un istanza esistente per importare dati dal server com "direttamente" ossia uno apre manualmente il programma carica il modello e tenendolo aperto preme un pulsante sul mio progetto che carica il modello.
    2)nuovo modello se l'instanza non c'è : l'utente sceglie un file e automaticamente viene creata un istanza ,caricato il modello e caricati i dati.
    3)Se l'istanza c'è gia vorrei creare una nuova istanza per poter lasciare inalterata l'istanza presente e non modificare niente in quel modello , andando ad importare i dati dal secondo modello.

    questo è il codice che uso:
    codice:
    		CLSID clsid; 
    	
    		IUnknown *punk;
    		DWORD dwUnused;
    		hr = CLSIDFromString(L"{827954DF-1EF3-4FFD-BEEB-CF0FB10E70B8}", &clsid); 
    		hr =CoCreateInstance(clsid,NULL,CLSCTX_LOCAL_SERVER,IID_IUnknown, (void **)&punk) ;
    
    		hr =CoRegisterClassObject(clsid, punk,CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &dwUnused);
    	
    		hr= punk->QueryInterface(__uuidof(Sap2000::_SapObject), (void**)&m_pSap);
    
    		//Lancio sap2000 se è chiuso , carico il file .sdb e importo
    		
    		AfxOleGetMessageFilter()->SetMessagePendingDelay(0);
    		AfxOleGetMessageFilter()->EnableNotRespondingDialog(FALSE);
    		AfxOleGetMessageFilter()->EnableBusyDialog(FALSE);
    
    		if(bImportationType == IMPORTER_API_START_SDB)
    		{
    			_bstr_t bstrFile = strFile;
    			m_pSap->ApplicationStart(Sap2000::kN_m_C,TRUE, "c:\\sap\\beam2.SDB");
    
                              }

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    up

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.