2011-11-19 9 views
5

Krótkie pytanie: czy jest to możliwe (oczywiście w systemie operacyjnym x64)? Jeśli nie, to dlaczego?Wywołanie zestawu x64 przez COM z aplikacji 32-bitowej

I opracowali C# dll wtyczki dla programu Excel 32.

Kiedy skompilowany w x86 to działa dobrze.

Po kompilacji w x64 połączenie COM nie działa.

Czy potrzebuję 64-bitowej wersji programu Excel?

Pomyślałem, że COM był agnostykiem w kompilowaniu architektury i umożliwił komunikację między bibliotekami dll opracowanymi w różnych technologiach i posiadającymi różne architektury, ale myślę, że to drugie jest złe.

Domyślam się, że droid x64 bit może oczywiście nie zostać wywołany przez COM (lub inny) z 32-bitowej aplikacji.

+0

Prawdopodobnie potrzebujesz 64-bitowego systemu (przynajmniej jądro) do uruchomienia kodu 64-bitowego. –

+0

@BasileStarynkevitch Tak, oczywiście. Dodałem precyzję w poście –

+0

Czy już próbowałeś kompilować dla AnyCPU? – Filburt

Odpowiedz

9

COM obsługuje dwa rodzaje serwerów, procesowe i poza procesami. Rozszerzenia pakietu Office są składnikami wewnątrzprocesowymi, biblioteką DLL, która jest ładowana do procesu. Twarda reguła dla procesów 32-bitowych polega na tym, że nie mogą załadować 64-bitowych bibliotek DLL. I na odwrót. Jest to wymuszane przez sam rejestr, dlatego proces 32-bitowy nie może uzyskać bezpośredniego dostępu do informacji rejestracyjnych dla 64-bitowych serwerów COM. Są przekierowywane do kluczy HKLM/Software/Wow6432Node. Innymi słowy, nie mogą one nawet składać się na niewłaściwą bitness.

Komponenty pozaprocesowe nie mają tego ograniczenia, działają we własnym procesie. COM organizuje połączenia między dwoma procesami za pomocą RPC i dokumentów ponad różnicę bitness. Jest to również sposób na uzyskanie 64-bitowego procesora z 64-bitowym serwerem do pracy z 32-bitowym hostem, możesz uruchomić komponent w zastępczym procesie. Jest to trudne do wykonania i prawie nigdy nie warte kłopotów, z połączeń procesowych są o wiele droższe niż wywołania wewnątrz procesu ze względu na wymagane przełączanie kontekstowe i marshalingowe. Nie tylko trochę droższy, jest około 10 000 razy wolniejszy, głównie dlatego, że wywołanie funkcji w toku jest tak szybkie. Jest używany tylko do zachowania starego 32-bitowego serwera pracującego z programem 64-bitowym. Spójrz na hosting COM +, jeśli chcesz tego spróbować, nie wiem zbyt wiele na ten temat.

+0

Dziękuję bardzo, kolego. To dokładnie takie czyste potwierdzenie, którego szukałem. A twoja precyzja dotycząca wywołań procesowych, które są znacznie droższe, jest dla nas bardzo cenna, oszczędza nam czasu na próbę zrobienia tego z okropnymi wynikami wydajności. Więc jeśli naprawdę chcę trzymać się mojego x64 Framework, chyba potrzebuję dystrybucji x64 programu Excel. –