¿Es posible usar COM libre de registro con DotNet interop y C#? Si es así, ¿cómo se agrega una referencia al objeto COM en el proyecto C#?Interoperación COM libre de Reg con C#, posible?
Tengo un dll de servidor COM ATL sin registro con un manifiesto incrustado y dos clientes de prueba, uno cpp el otro C#. El cliente CPP hace referencia correctamente el objeto COM utilizando una declaración de importación y de
#pragma comment(linker, "\"/manifestdependency:type='win32' name='TestComSvr2' version='1.0.0.0'\"")
o la creación de 'Manifiesto adicional Dependencias' "type = 'win32' name = versión 'TestComSvr1' = '1.0.0.0'" bajo Enlazador -> Opciones de archivo de manifiesto, después de lo cual el cliente cpp se ejecutará correctamente siempre que el componente COM esté en el mismo directorio.
El cliente de C# se niega a jugar.
El intento de añadir una referencia de archivo a la DLL de componente COM registrado o resultados TLB no registrados en el error:
"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".
Registro sólo la biblioteca de tipos con 'regtlib TestComSvr' y luego la creación de un archivo o COM referencia a que da lugar el proyecto de C# no haber construido con:
"Error loading type library/Dll. (Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY))".
Registro del componente COM y la creación de una referencia normalmente en el proyecto C#, el establecimiento de la referencia a Aislado, la construcción del proyecto de C# y luego la anulación del registro el componente y la ejecución de los resultados del proyecto de C# en esta excepción:
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: Incluso si esto funcionó no sería un caso útil de todos modos, ya que en última instancia, que todavía requiere el registro del componente, Acabo de prueba para minuciosidad.
Hasta ahora, la única manera en que he podido hacer referencia al objeto COM desde C# es registrando el objeto COM en sí, lo que desde luego derrota por completo el punto, ya que no está libre de registro.
¿Alguien tiene alguna idea?
(Esto está en WinXP con VS2010 sp1).
¿Se pregunta si necesitaría crear un archivo de manifiesto para el propio Visual Studio? encontré este enlace, pero no estoy seguro de si es tan útil http://msdn.microsoft.com/en-us/library/ms973913.aspx – PeskyGnat
Además, ¿qué ocurre si crea un dll de interoperabilidad con tlbimp y lo referencia? por ejemplo con 'tlbimp'? –
PeskyGnat