2013-07-06 14 views
11

mam bibliotekę 32 com i chcieliby wykorzystać swoją funkcjonalność aplikacji 64-bitowych, I już szukał w internecie i udało się uzyskać ten workaroundużyciu com 32 bity biblioteka na 64 bitach aplikacyjnych

  1. Zlokalizuj identyfikator GUID obiektu COM pod HKey_Classes_Root\Wow6432Node\CLSID\[GUID]
  2. Po zlokalizowaniu dodaj nową wartość REG_SZ (string). Nazwa powinna być AppID i dane powinny być takie same obiekt COM GUID, który właśnie szukał
  3. Dodaj nowy klucz pod HKey_Classes_Root\Wow6432Node\AppID\
  4. Nowy klucz powinien być nazywany tak samo jak com obiektu GUID
  5. Pod nowym kluczem właśnie dodałeś, dodaj nową wartość REG_SZ (string) i nazwij ją: DllSurrogate. Pozostaw wartość pusty
  6. Utwórz nowy klucz pod HKey_Local_Machine\Software\Classes\AppID\

ale to nie działa na Windows 7 64 bity, głównym problemem jest to, kiedy zrobić kroku 6 znalazłem klucz już istnieje, jakiekolwiek ciało wie, dlaczego? lub jak mogę to pokonać?

dokumentacja jest tutaj bardzo krótki

+1

Krok 3 ma utworzyć klucz widoczny dla programów 32-bitowych. Im dokładniejsza nazwa klawisza to HKLM \ Software \ Wow6432Node \ Classes \ AppID. Krok 6 ma stworzyć klucz widoczny dla programów 64-bitowych, ta sama ścieżka minus część "Wow6432Node".Coś bardzo nie tak z twoim komputerem, jeśli klucz utworzony w kroku 3 jest widoczny w ścieżce w kroku 6. Nie pomijaj części Wow6432Node. –

+0

Czy uważasz, że problem może istnieć, ponieważ użyłem lub używam regeditu 32-bitowego lub 64-bitowego? Czy problem może polegać na tym, że zarejestrowałem bibliotekę z 32 lub 64 regsrv32.exe? –

+1

Czy rozważałeś przebudowanie biblioteki na 64? (Lub, przypuszczam, lepsze pytanie byłoby, masz dostęp do źródła biblioteki?) –

Odpowiedz

0

To może być spowodowane przez registry virtualization. Miałem takie problemy w przeszłości. Największą irytacją jest to, że nie widzisz wartości lub kluczy, które redaktor już narzeka. W rzeczywistości istnieją w innej części rejestru (prawdopodobnie uli użytkowników).

powodzenia

0

64-bitowy wykonywalny nie może połączyć się z 32-bitowych DLL (i vice versa). Powinieneś skompilować 64-bitową aplikację jako 32-bitową. W ten sposób będziesz mógł korzystać z biblioteki DLL i uruchamiać ją w 32-bitowym i 64-bitowym systemie operacyjnym.

0

Rejestr jest odpowiednim sposobem na zlokalizowanie wymaganej biblioteki DLL.

Jeśli znasz ścieżkę do 32-bitowej biblioteki DLL w każdym systemie lub możesz ją przekazać za pomocą aplikacji, a kontrolujesz kod swojej 64-bitowej aplikacji, możesz użyć następujących technik: 1) Mechanizm SxS + manifesty pozwalają dll obciążenia z lokalnego folderu bez registring go i stworzyć z komponentów COM to 2) Dodać do tego ręcznie http://www.codeproject.com/Articles/18433/Emulating-CoCreateInstance

The 2nd rozwiązanie jest znacznie prostsze ...

1

Więc co trzeba zrobić tutaj jest uruchomienie ten 32-bitowy komponent COM w swoim własnym procesie, tj. przez wywołanie CoCreateInstance z CLSCTX_LOCAL_SERVER.

Albo będzie to proste z istniejącej biblioteki DLL, czy nie należy owinąć go z własnego 32bit prostego składnika COM, który wspiera działa jako lokalny serwer ...

Próbując dostosować rejestru jest gra bez wygranej - korzystaj z biblioteki Dll zgodnie z przeznaczeniem i oszczędzaj sobie bólu.

Powiązane problemy