2011-06-25 30 views
5

Tôi gặp sự cố khi cố đăng ký DLL. Hệ điều hành của tôi là Windows 7 (x64).regsvr32 không tạo bất kỳ mục nhập nào trong sổ đăng ký

Tôi thực hiện theo hai cách khác nhau:

1) Sử dụng regsvr32. Tôi nhận được tin nhắn "DllRegisterServer ... thành công", tuy nhiên tôi không thể tìm thấy CLSID của tôi trong registry. (Và tôi nhận được "Class không đăng ký" lỗi cố gắng để tạo ra một instace của thành phần với CLSID này) .Trong trường hợp này, tôi biết rằng DllRegisterServer không bao giờ được gọi (vì tôi tạo một tập tin văn bản ở đầu của chức năng này và nó không phải là tạo).

2) Tải DLL của tôi một cách rõ ràng và gọi DllRegisterServer. Trong trường hợp này, DllRegisterServer trả về S_OK, nhưng tôi vẫn không thể tìm thấy CLSID của tôi trong registry và nhận được lỗi "Class not registered".

Tôi chắc chắn mã là chính xác (vì nó không chỉ hoạt động trên hệ điều hành của tôi), do đó, có vẻ như vấn đề là trong hệ điều hành. Có ai phải đối mặt với một vấn đề như vậy không?

Trả lời

1

http://msdn.microsoft.com/en-us/library/aa384232(v=vs.85).aspx nên giải thích nó

Tùy thuộc vào việc dll của bạn là 32bit hay 64bit các khóa registry được tạo ra tại các địa điểm riêng biệt

+0

DLL của tôi là 32bit và tôi mong muốn khoá đăng ký được tạo trong HKEY_CLASSES_ROOT \ CLSID. Tuy nhiên, tôi đã tìm kiếm toàn bộ sổ đăng ký cho nó và nó không có ở đó. – skvadrik

+2

Bạn đã đọc liên kết mà tôi đã đăng chưa? Hãy thử phím HKEY_CLASSES_ROOT \ Wow6432Node \ CLSID –

+0

Ngoài ra, ứng dụng gọi điện của bạn cũng là 32 bit. Một ứng dụng bản địa 32 bit chỉ có thể tải 32 bit dll và cùng với 64bit –

0

Chỉ cần giải quyết một vấn đề giống hệt nhau. Tôi đã tự thêm vào giao diện mới 32-bit COM mới, thực hiện (MyNewClass) và tập tin rgs. Nhưng khi tôi đã đăng ký thành công COM bằng SysWow64 \ regsvr32.exe, tôi đã nhận thấy rằng ProgId/CLSID của tôi không xuất hiện trong HKCR \ CLSID hoặc HKCR \ Wow6432Node \ CLSID

Vì vậy, thực sự tôi đã bỏ lỡ một vài điều:

  1. tôi đã có thêm OBJECT_ENTRY dưới BEGIN_OBJECT_MAP trong MyApp.cpp nộp
  2. và thêm DECLARE_REGISTRY_RESOURCEID (IDR_xxx) để MyNewClass.h tập tin

resource.h

xác định IDR_xxx 105

ExistingCom.rc

IDR_xxx REGISTRY discardable "MyNewClass.rgs"

0

Chạy công cụ dòng lệnh as administrator và sau đó chạy regsvr32 lệnh đăng ký

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