Come ho capito ci sei tre modi per implementare smistamento in COM:In che modo COM seleziona come eseguire il marshalling di un'interfaccia?
- libreria dei tipi di smistamento
- proxy/stub smistamento
- attuazione IMarshal dall'oggetto
ora come funziona il componente consumatore (utente) scegliere quale sarà utilizzato? Decide da solo e usa il modo preferito o chiama alcune funzioni built-in e risolve il problema?
Attualmente ho riscontrato quanto segue: il mio componente implementa un'interfaccia personalizzata ICustomInterface
implementata anche da un componente di un'altra azienda. Il mio componente non ha una libreria dei tipi e non implementa IMarshal. Il registro di sistema contiene la chiave HKCR \ Interface {uuidof (ICustomInterface)} \ ProxyStubClsid32 con un GUID del proxy/stub che può essere rintracciato in una libreria fornita da quell'altra società.
Ora, quando il mio componente consumer inizializza il componente, chiama QueryInterface() che richiede IMarshal dal mio componente e quando viene restituito E_NOINTERFACE non fa nulla. Perché questo è il motivo per cui kicker la libreria proxy/stub dall'altra azienda?
No, non ne ho uno. Ho provato il wizard con tutte le impostazioni ragionevoli e non dichiara tale funzione. Ho anche cercato su Google questo nome - nessuna corrispondenza ragionevole. Potrebbe essere che hai scritto male il nome? – sharptooth
ho scavato nel mio vecchio codice e ho scoperto che la query cieca era in realtà la mia funzione. LOL .. usa questa macro http://msdn.microsoft.com/en-us/library/5b6w5bwx(VS.80).aspx –
Bene, questo è un bel modo di aggancio al QI().Ma questo è tutto - la funzione è chiamata per un insieme di iterfaces, incluso IMarshal, senza apparenti motivi. – sharptooth