2009-10-15 15 views
6

Mam więc rejestrację biblioteki DLL VB6, do której odwołuje się moja biblioteka montażowa .NET 3.5, do której odwołuje się aplikacja .NET 3.5 WinForms (nie wiem, czy jest to istotne, ale dołączony do malowania obrazu).Reg Free COM - Isolating COM Reference - brakująca wartość "(domyślnie)"

otrzymuję błąd „problem izolować odwołanie COM«SomeVBDll»: Registry key 'HKEY_CURRENT_USER\SOFTWARE\CLASSES\CLSID\{dd1d7f58-1d6b-4370-a1b9-05c03816a128}\InProcServer32' is missing value '(Default)'

Moją pierwszą próbę, aby sprawdzić, czy wartość ta faktycznie istniała, a następnie umieścić go na swoim miejscu. Spowodowało to ten sam komunikat powyżej w kompilacji.

Czy ktoś napotkał ten problem i zna jakiekolwiek rozwiązanie tego problemu?

Z góry dziękuję. Poniżej znajduje się manifest z zestawu, który bezpośrednio odwołuje się do biblioteki dll 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> 

EDIT ///

Zaznaczanie wszystkich klas w ramach VB6 DLL jako MultiUse Wydaje się, że problem został rozwiązany. Podczas gdy rozwiązuje to problem, którego doświadczam, a mimo to pozwala mi korzystać z niezarejestrowanej wersji COM, czy ktoś wie, jak obejść konieczność ustawiania wszystkich klas COM Instancing to MultiUse?

+0

Ten wątek [http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.interop /2006-01/msg00097.html] wskazuje, że problem może być związany z faktem, że istnieje kilka klas w bibliotece dll VB6, które mają instancje oznaczone jako prywatne. Tak też jest w przypadku mnie, mam jedną klasę MultiUse (nieprywatną), a reszta jest prywatna. Wolałbym nie oznaczać innych jako MultiUse, ale zrobię to, aby sprawdzić, czy w rzeczywistości działa to przy problemie ... –

+0

Ok, więc rzecz MultiUse wydaje się być tylko tymczasową poprawką i nie była faktycznym podstawowym problemem . Otrzymuję teraz ten sam problem, o którym mowa w moim oryginalnym wpisie. Jestem niekompatybilny z systemem Windows Vista Ultimate x64, budując projekt w Visual Studio 2008 jako użytkownik inny niż administrator. –

+0

Wydaje się, że raportowanie opisanego powyżej błędu dotyczy każdej klasy zdefiniowanej w bibliotece DLL COM. Weryfikowałem, że każda klasa jest oznaczona jako MultiUse. –

Odpowiedz

0

Jedyne proponowane rozwiązanie (jeśli chcesz uniknąć możliwych problemów związanych z bezpieczeństwem/konserwacją oznaczania wszystkich klas jako MultiUse), należy usunąć klucz rejestru ".../InProcServer32", ale to obejście ze standardem "ostrożnie mieszaj z rejestrem".

+0

usunięcie kluczy/InProcServer32 jako części procesu kompilacji nie rozwiązuje problemu. Byłbym w porządku, gdybym mógł wykonać tę pracę, ale nawet gdy usunę te klucze, nadal otrzymuję błędy. –

0

Po zaznaczeniu jako prywatne klasy COM VB6 nie rejestrują wartości dla Inproc32, a manifest zespołu generowany przez Visual Studio jest niekompletny. Istnieje kilka narzędzi, takich jak Make my Manifest http://mmm4vb6.atom5.com/, które mogą pomóc w utworzeniu manifestu dla komponentów

+0

Tak więc mimo, że zaznaczyłem każdy typ w moim VB6 dll MultiUse myślisz, że nadal mogę mieć oczywisty problem? Przyjrzę się MMM, gdy dostanę czas, aby sprawdzić, czy to pomaga. Dzięki za publikację. –