2009-10-15 9 views
6

Tengo un DLL VB6 libre de registro al que hace referencia mi biblioteca de ensamblados .NET 3.5 al que hace referencia en última instancia una aplicación .NET 3.5 WinForms (no estoy seguro de que sea relevante, pero incluido para pintar una imagen).Reg COM gratuito - Aislamiento de referencia COM - valor faltante '(predeterminado)'

estoy recibiendo el 'problema de aislamiento de referencia COM 'error SomeVBDll': Registry key 'HKEY_CURRENT_USER\SOFTWARE\CLASSES\CLSID\{dd1d7f58-1d6b-4370-a1b9-05c03816a128}\InProcServer32' is missing value '(Default)'

Mi intento inicial era comprobar si realmente existió este valor y luego ponerlo en su lugar. Esto dio como resultado el mismo mensaje anterior en la compilación.

¿Alguien ha encontrado este problema y conoce alguna resolución al respecto?

Gracias de antemano. A continuación se muestra el manifiesto de la asamblea que hace referencia directamente al dll de VB6.

<assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <assemblyIdentity name="Native.App.Core" version="1.0.0.0" type="win32" /> 
    <file name="SomeVBDll.dll" asmv2:size="184320"> 
    <hash xmlns="urn:schemas-microsoft-com:asm.v2"> 
     <dsig:Transforms> 
     <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" /> 
     </dsig:Transforms> 
     <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> 
     <dsig:DigestValue>BWWHQTqNGUupT8xznLoN3jn7S9Y=</dsig:DigestValue> 
    </hash> 
    <typelib tlbid="{755c1df5-d0c5-4e10-a93d-54bf186e8daf}" version="1.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" /> 
    <comClass clsid="{dd1d7f58-1d6b-4370-a1b9-05c03816a128}" threadingModel="Apartment" tlbid="{755c1df5-d0c5-4e10-a93d-54bf186e8daf}" progid="SomeVBDll.MyClass" /> 
    </file> 
</assembly> 

EDITAR ///

Marcado todas las clases dentro de la DLL de VB6 tan bien multiuso parece haber resuelto el problema. Si bien esto soluciona el problema que estaba experimentando y todavía me permite usar COM sin registro, ¿alguien sabe cómo moverse para tener que configurar todas las clases COM Instanciando en MultiUse?

+0

Este hilo [http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.interop /2006-01/msg00097.html] indica que el problema podría estar relacionado con el hecho de que hay algunas clases dentro del dll VB6 que tienen instancias marcadas como privadas. Este también es el caso para mí, tengo una clase MultiUse (no privada) y el resto es privado. Preferiría no marcar a los demás como MultiUse, pero lo haré para ver si de hecho eso funciona alrededor del problema ... –

+0

Ok, entonces la cosa MultiUse parece ser solo una solución temporal y no era el problema subyacente real . Ahora recibo el mismo problema mencionado en mi publicación original. Me estoy ejecutando como no administrador en Windows Vista Ultimate x64 construyendo el proyecto en Visual Studio 2008 como no administrador. –

+0

Parece informar el error descrito anteriormente para cada clase definida en la DLL COM. He verificado que cada clase está marcada como MultiUse. –

Respuesta

0

La única solución que he propuesto (si desea evitar los posibles problemas de seguridad/mantenimiento de marcar todas las clases como MultiUse) es eliminar la clave de registro ".../InProcServer32", pero esa solución viene con la advertencia estándar de "cuidado con el registro".

+0

Incluso borrar las claves/InProcServer32 como parte del proceso de compilación no resuelve el problema para mí. Estaría bien si pudiera hacer que funcione, pero incluso cuando elimino esas claves todavía recibo los errores. –

0

Cuando se marcan como clases COM privadas VB6 no registran un valor para Inproc32 y el manifiesto de ensamblado generado por Visual Studio está incompleto. Hay algunas herramientas como Make my Manifest http://mmm4vb6.atom5.com/ que pueden ayudarlo a crear un manifiesto para sus componentes

+0

Entonces, aunque he marcado todos los tipos en mi VB6 dll MultiUse, ¿cree que todavía puedo tener un problema manifiesto? Echaré un vistazo al MMM cuando tenga tiempo de ver si esto ayuda. Gracias por publicar. –