Mam obiekt COM innej firmy (32-bitowy), który muszę wywołać z mojej aplikacji C# (64-bitowy). Wiem, że muszę uruchomić obiekt COM w oddzielnym procesie. Ten obiekt COM ma zaimplementowane wiele klas, więc staram się unikać pisania własnego opakowania zdalnego przetwarzania, które eksponuje wszystkie metody. COM + wydaje się być najprostszym rozwiązaniem. Otworzyłem menu Component Services, utworzyłem nową aplikację COM +, dodano mój obiekt COM jako składnik do tej aplikacji. Wszystko zdawało się pięknie importować.Wywołanie 32-bitowego COM z C# działa w trybie 64-bitowym
W mojej aplikacji C# dodałem oryginalny obiekt COM jako odniesienie (który automatycznie generuje bibliotekę typów). Korzystając z odwołania do biblioteki typów, mogę tworzyć obiekty ze składnika COM + (widzę, że zaczynają się one obracać w oknie Component Services), ale kiedy próbuję uzyskać dostęp do metod obiektu, pojawia się błąd informujący, że interfejs nie jest zarejestrowany.
Czy ktoś ma jakąś wskazówkę? Wróciłem i uruchomiłem regsvr32 na obiekcie COM, ale nie sądzę, że było to konieczne i nie pomogło. Czy moje użycie w języku C# jest poprawne? Autouzupełnianie VS2008 nie stanowiło problemu z obejrzeniem tych metod.
Dokładna Wyjątkiem jest: „Interfejs niezarejestrowany (Wyjątek od HRESULT: 0x80040155)”
jasne, co dokładnie uprawnienia i role są ow Usług Component, Próbowałem konfigurowania tożsamości COM + dopełnienie do uruchamiane w ramach konta systemowego, zarówno jako usługa lokalna, jak i jako użytkownik interaktywny. Dodałem Wszyscy jako użytkownika w rolach. Wszystko działa lokalnie, więc nie powinno być problemu z uprawnieniami do plików ani czymś podobnym.
Chcę również powtórzyć, że ten obiekt COM zawiera wiele klas. Udało mi się utworzyć instancję jednego obiektu klasy w moim kliencie i ustawić niektóre wartości właściwości. Udało mi się również utworzyć instancję innego obiektu klasy, ale otrzymałem ten wyjątek podczas próby wywołania metody tego drugiego obiektu .... tak więc nie myślę, że jest problem z którym rejestru mój obiekt COM jest zarejestrowany.
COM + jest bardzo zależny od praw/uprawnień itp. być może to, co się dzieje ... – Yahia
Windows skutecznie ma dwa różne rejestry, jeden dla 32 i jeden dla 64 bitów. Wierzę, że interfejs jest zarejestrowany w jednym, a następnie patrzy w innym. – GSerg
GSerg jest poprawny. Jeśli aplikacja, która je rejestruje, jest 32-bitowa i działa w systemie 64-bitowym, wszystkie wpisy rejestru trafiają do lustrzanego węzła WOW6432, a nie do miejsca, do którego normalnie by się udały. –