6

Stiamo provando ad aggiungere il test dell'unità all'applicazione COM C++ legacy. Abbiamo anche bisogno che le nostre macchine di costruzione siano in grado di eseguire il test dell'unità per garantire che ogni build non abbia introdotto errori. Tuttavia, non vogliamo che le macchine di compilazione debbano registrare le comllle in modo che una macchina di compilazione possa costruire più versioni in parallelo. Abbiamo ipotizzato che potremmo passare all'utilizzo di registration free com con file manifest, ma sto avendo un momento molto difficile per farlo funzionare. Non ancora sulla nostra base di codice ma solo sull'esempio di base fornito da Microsoft.
Sto usando questa pagina http://msdn.microsoft.com/en-us/library/ms973913.aspx#rfacomwalk_topic8 e semplicemente non funzionerà, quando provo a correre con la dll non registrato per utilizzare i file manifesto, ottengo il "Classe non registrata di errore"Come possiamo testare il nostro codice COM C++ senza registrare le DLL?

I campioni essi fornire un buon lavoro (usando C++ com server e C++ client), tuttavia quando li ricostruisco non funzionano.

Stiamo usando Visual Studio 2013 e quindi mi sembra che ci sia stato un grande cambiamento nel modo in cui funziona la registrazione gratuita, il che rende questo tutorial incompatibile con il compilatore più recente.

Qualcuno può indicarmi risorse sull'utilizzo di registration free com con l'ultima versione di Visual Studio? Per complicare ulteriormente le cose nella nostra app, quando ci arrivo usiamo VS 2013 ma puntiamo al compilatore 2010, speriamo che non faccia molta differenza.

Inoltre, se esiste un modo migliore di eseguire test dell'unità C++ sui componenti COM senza registrazione rispetto ai file manifest, mi piacerebbe sapere anche su quelli.

Grazie per il vostro aiuto.

+0

Siamo di fronte allo stesso problema. Abbiamo un componente COM con un file manifest per l'attivazione gratuita della registrazione. Verifichiamo che manifest sia corretto con un'applicazione sandbox. Non siamo in grado di replicare questa sandbox come test nativo in esecuzione in Visual Studio 2013: il test viene caricato, eseguito e non riesce con "classe non registrata". Sembra che il test runner stia scherzando con il contesto di attivazione in cui viene eseguito il test. Non abbiamo idea di come risolvere questo problema. –

risposta

1

È possibile implementare la propria versione di CoCreateInstance che utilizza un parametro percorso DLL aggiuntivo. Il codice potrebbe essere qualcosa come questo (la gestione degli errori e altri dettagli omessi per brevità):

HRESULT CoCreateInstanceForTest(dllPath, rclsid, riid, ppv) 
{ 
    HINSTANCE hinst = LoadLibrary(dllPath); // TODO: Maybe it is already loaded 
    dllGetClassObject = GetProcAddress(hinst, "DllGetClassObject"); 
    return dllGetClassObject(rclsid, riid, ppv); 
} 

Inoltre la gestione degli errori, è inoltre necessario tenere traccia delle DLL che già caricati. Usa una lista o un array in cui ogni elemento ha una tupla per tracciarlo. Ad un certo punto potresti voler scaricare tutti o alcuni di essi.

Ovviamente, presumo che si tratti di server COM inproc.

Problemi correlati