2009-10-29 8 views
7

Pracujemy nad integracją dużej aplikacji opartej na MFC z kilkoma zarządzanymi dodatkami (.NET). Komunikacja z tymi dodatkami odbywa się za pośrednictwem COM.Złącze COM z niezależnymi od rejestracji i zależnymi

Historycznie właśnie wykorzystaliśmy rejestr, aby udostępnić te dodatki (jako serwery COM) do aplikacji. Ale teraz próbujemy użyć do tego celu interfejsu COM bez rejestracji.

Chcielibyśmy, aby te dodatki mogły żyć w oddzielnym katalogu od tego, w którym działa aplikacja - najlepiej gdziekolwiek. Ale najwyraźniej mamy problemy z instancją obiektów serwerów z powodu niezdolności do rozwiązywania zależnych zespołów, które również znajdują się w katalogu z biblioteką DLL COM.

"Staroświecki" współdziałanie COM obsługiwane przez użycie kontekstu LoadFrom podczas ładowania zespołu docelowego. Ale mechanizm kontekstu aktywacji nie wydaje się tego robić.

Czy ktoś wie, jak to uruchomić? Nie jest jasne, czy możemy zidentyfikować zależne zespoły w manifeście SxS modułu, czy może możemy inaczej utworzyć kontekst aktywacji?

Dzięki za wszelkie myśli/porady!

Jeff

+0

Znalazłeś rozwiązanie that'? – RayOldProf

Odpowiedz

1

Nadzieja Rozumiem problem, bo nie jestem tak obeznany z projektu MFC ani jego ograniczenia. Co powiesz na "dobrze znaną" klasę .NET z interfejsem (na stałe zarejestrowanym w aplikacji MFC), który z kolei obsługuje wszystkie aktywacje i tworzenie instancji?

Rodney

+2

Jest to obejście, które odniosło sukces: tworzymy moduł C++/CLI, który można aktywować w sposób wolny od rejestracji, i używamy go do tworzenia instancji klasy C#. Aby to zadziałało, musimy również skonfigurować procedurę obsługi zdarzenia AssemblyResolve, aby możliwe było zlokalizowanie zależnych zestawów w tym samym katalogu. To jest OK, ale jest trochę niezgrabne. Wygląda na to, że powinno to działać bez tego dodatkowego poziomu pośredniego. – Jeff

-1

Czy zarejestrowany przez pośredników (międzyoperacyjne) bibliotek DLL z .NET Framework?

C: \ WINDOWS \ Microsoft.NET \ ram \ v2.0.50727 \ regasm "ścieżka .. \ AxInterop.xxx.dll" lub C: \ WINDOWS \ Microsoft.NET \ ram \ v2.0.50727 \ regasm „ścieżka .. \ Interop.xxx.dll”

Pozdrowienia Phani

+2

Dzięki za komentarz, Phani. Chodzi o to, aby uniknąć rejestracji. – Jeff

0

Kiedy patrzę w artykule na Simplify App Deployment with ClickOnce and Registration-Free COM Pragnę zauważyć, że odniesienie one nazwę pliku rejestracyjnego wolne obiektu COM DLL w manifeście aplikacji. Zgaduję, że ta nazwa pliku mogła zostać zmieniona tak, aby zawierała katalog lub coś takiego.

Po drugie, w sekcji "Bardziej złożony przykład" zawierają zależne obiekty COM jako odniesienia do ich projektu i ustawia je jako izolowane. Oznacza to, że teraz są one również wolne od rejestracji. Domyślam się, że ich ścieżka może również zostać zaktualizowana.

+0

Naprawdę nie mamy luksusu modyfikacji manifestu aplikacji, ponieważ ładowane tutaj zespoły są "dodatkami" i mogą być dodane po fakcie. Możliwe, że odpowiedź na to pytanie brzmi "coś więcej" w manifeście modułu, ale nic, co wypróbowaliśmy, nie zadziałało - wydaje się, że jest "tylko" problemem z algorytmami ładowania .NET. – Jeff

-1

otworzyć wiersz polecenia wizualną studio i próbować zarejestrować swój zespół za pomocą regasm

regasm /tlb:"path" 
+3

Jak już wspomniałem powyżej, nie chcemy niczego rejestrować. Obejmuje to bibliotekę typów. Dodatkowo w tym przypadku biblioteka typów implementowanego interfejsu jest już zarejestrowana. – Jeff

Powiązane problemy