E 'possibile utilizzare COM senza registrazione con Dotnet interop e C#? In tal caso, come si aggiunge un riferimento all'oggetto COM nel progetto C#?L'interoperabilità COM senza registri con C# è possibile?
Ho una DLL del server COM ATL senza reg con un manifest incorporato e due client di test, uno cpp l'altro C#. Il client cpp fa riferimento correttamente l'oggetto COM utilizzando un'istruzione di importazione e di
#pragma comment(linker, "\"/manifestdependency:type='win32' name='TestComSvr2' version='1.0.0.0'\"")
o l'impostazione a 'aggiuntive manifesto Dipendenze' "type = 'Win32' name = versione 'TestComSvr1' = '1.0.0.0'" sotto Linker -> Opzioni file manifest, dopo di che il client cpp verrà eseguito correttamente purché il componente COM si trovi nella stessa directory.
Il client C# si rifiuta comunque di giocare.
Il tentativo di aggiungere un riferimento al file sia alla non registrato dll componente COM o risultati TLB non registrati in errore:
"A reference to 'blah blah' could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component".
Registrazione solo la libreria dei tipi con 'Regtlib TestComSvr' e quindi la creazione di un file o COM riferimento a tale risultato il progetto C# non riuscendo a costruire con:
"Error loading type library/Dll. (Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY))".
Registrazione del componente COM e la creazione di un punto di riferimento normalmente nel progetto C#, impostando il riferimento alla isolato, la costruzione del progetto C# quindi l'annullamento della registrazione il componente e l'esecuzione dei C# risultati in questa eccezione:
Retrieving the COM class factory for component with CLSID {B1D0A80F-0050-4856-BACD-87D664E58CBE} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
Nota: Anche se questo ha funzionato non sarebbe un caso utile in ogni caso, dal momento che in ultima analisi, richiede ancora la registrazione del componente, ho appena provato per completezza.
Finora l'unico modo in cui sono riuscito a fare riferimento all'oggetto COM da C# è registrando l'oggetto COM stesso, che ovviamente sconfigge completamente il punto da allora non è affatto reg-free.
Qualcuno ha qualche idea?
(Questo è su WinXP con VS2010 sp1).
Chiedersi se è necessario creare un file manifest per l'exe di Visual Studio stesso? trovato questo link, ma non sono sicuro che sia tutto così utile http://msdn.microsoft.com/en-us/library/ms973913.aspx – PeskyGnat
Inoltre, cosa succede se si crea una dope di interoperabilità con tlbimp e si fa riferimento a questo? cioè con 'tlbimp'? –
PeskyGnat