2013-07-06 38 views
11

tôi có một thư viện 32 com và muốn sử dụng chức năng của nó bởi một ứng dụng 64 bit, i 've đã tìm kiếm trên internet và quản lý để có được điều này workaroundsử dụng com 32 bit thư viện trên 64 bit ứng dụng

  1. Định vị đối tượng COM GUID của bạn theo HKey_Classes_Root\Wow6432Node\CLSID\[GUID]
  2. Khi đã thêm giá trị mới REG_SZ (string). Tên nên AppID và dữ liệu cần được như vậy GUID đối tượng COM mà bạn vừa tìm kiếm
  3. Thêm một chìa khóa mới theo HKey_Classes_Root\Wow6432Node\AppID\
  4. Chìa khóa mới nên được gọi là giống như các đối tượng com GUID
  5. Dưới sự chủ chốt mới bạn vừa thêm, thêm Giá trị REG_SZ (string) mới và gọi nó là DllSurrogate. Để lại giá trị trống
  6. Tạo một khóa mới theo HKey_Local_Machine\Software\Classes\AppID\

nhưng nó không hoạt động trên Windows 7 64 bit, vấn đề chính là khi tôi làm bước 6 tôi tìm thấy chìa khóa đã tồn tại, cơ thể nào cũng biết tại sao? hoặc làm thế nào tôi có thể vượt qua nó?

tài liệu ở đây là rất ngắn

+1

Bước 3 được cho là tạo khóa hiển thị cho các chương trình 32 bit. Tên khóa chính xác hơn là HKLM \ Software \ Wow6432Node \ Classes \ AppID. Bước 6 được cho là tạo khóa hiển thị cho các chương trình 64 bit, cùng một đường dẫn trừ đi phần "Wow6432Node".Đã xảy ra sự cố với máy của bạn nếu khóa bạn đã tạo ở bước 3 hiển thị ở đường dẫn ở bước 6. Không bỏ qua phần Wow6432Node. –

+0

bạn có điều vấn đề có thể tồn tại bởi vì tôi đã sử dụng hoặc sử dụng 32 bit hoặc 64 bit regedit? vấn đề có thể là tôi đã đăng ký thư viện với 32 hoặc 64 regsrv32.exe không? –

+1

Bạn đã xem xét việc xây dựng lại thư viện là 64? (Hoặc, tôi cho rằng câu hỏi tốt hơn là, bạn có quyền truy cập vào nguồn thư viện không?) –

Trả lời

0

Nó có thể được gây ra bởi registry virtualization. Ive đã có vấn đề như thế này trong quá khứ. Sự khó chịu lớn nhất là bạn không thể thấy các giá trị hoặc các khóa mà trình soạn thảo đang phàn nàn đã tồn tại. Chúng thực sự tồn tại trong một phần khác của registry (có khả năng là người dùng hive).

Chúc may mắn

0

Thực thi 64 bit không thể gọi 32-bit DLL (và ngược lại). Bạn nên biên dịch ứng dụng 64 bit của mình thành 32-bit. Bằng cách đó bạn sẽ có thể sử dụng DLL và chạy tất cả trên hệ điều hành 32 bit và 64 bit.

0

Đăng ký chỉ là một cách phù hợp để xác định vị trí yêu cầu dll.

Nếu bạn biết đường dẫn đến dll 32bit trên mỗi hệ thống hoặc bạn có thể vượt qua nó với ứng dụng của bạn, và bạn kiểm soát mã của ứng dụng 64bit của bạn, sau đó bạn có thể sử dụng kỹ thuật sau đây: 1) SxS cơ chế + biểu hiện cho phép tải dll từ một thư mục địa phương mà không registring nó và tạo các thành phần COM từ nó 2) thực hiện điều này bằng tay http://www.codeproject.com/Articles/18433/Emulating-CoCreateInstance

giải pháp thứ 2 là đơn giản hơn nhiều ...

1

Vì vậy, những gì bạn cần làm ở đây là khởi động thành phần COM 32 bit này trong quá trình riêng của nó, tức là bằng cách gọi CoCreateInstance với CLSCTX_LOCAL_SERVER.

Hoặc đây sẽ là thẳng về phía trước với các DLL hiện có, hoặc nếu không, bạn nên quấn nó với 32bit thành phần COM đơn giản của riêng bạn mà hỗ trợ chạy như một máy chủ địa phương ...

Đang cố gắng để tinh chỉnh registry là một không có trò chơi thắng - sử dụng Dll như nó đã được dự định và tiết kiệm cho mình những nỗi đau.

Các vấn đề liên quan