2010-08-09 40 views
29

Tôi có một thành phần COM 32 bit DLL và DLL này được viết bằng Delphi. Đó là một Win32 DLL. Tôi muốn sử dụng DLL này trong dự án Visual C# của tôi trên nền tảng .NET.Đăng ký 32 bit COM DLL tới 64 bit Windows 7

Tôi không thể thêm tham chiếu đến DLL này trong dự án. tôi cố gắng đăng ký nó trong Command Prompt as Administrator trong Windows 7 64 bit, nhưng tôi nhận được lỗi này:

Check if the module is compatible with an x86 (32-bit) or x64 (64-bit) version of regsvr32.exe.

Đầu tiên tôi đặt tập tin DLL để cửa sổ/thư mục system32. Sau đó, tôi mở Command Prompt là Administrator. Tôi viết regsvr32 huginalpha.dll và thực hiện lệnh này. Nhưng tôi nhận được lỗi. tôi có thể làm gì?

+0

xem bài đăng này về lỗi 0x8007000B http://stackoverflow.com/questions/18007967/net-framework-error-hresult-0x8007000b/36353971#36353971 – JinSnow

Trả lời

50

Có thể bạn đang cố gắng đăng ký thư viện 32 bit với phiên bản regsvr32 64 bit. See this KB article - bạn cần chạy regsvr32 từ windows \ SysWOW64 đối với thư viện 32 bit.

+8

+1, thực sự. Và DLL đó * không * cũng được lưu trong c: \ windows \ system32, hoặc là các thành phần 64 bit. –

+0

Phải, vì vậy tệp 32 được gọi là 64 bit và phiên bản 32 bit nằm trong một thư mục có tên WOW64. – aaa90210

0

đặt dll vào thư mục system32 hoặc syswow32 và sử dụng regsvr32 phù hợp để đăng ký nó. cho rằng mặc dù nó đã thất bại trong việc đăng ký lỗi, tôi khởi động lại WIN 7 64 VÀ ứng dụng vb của tôi đã tải dll tốt!

0

Nếu sự cố không được giải quyết, khi sử dụng phiên bản regsvr32 SysWoW64, hãy đảm bảo rằng tất cả các phụ thuộc thư viện đều có cùng kiến ​​trúc. Ví dụ, khi

regsvr32 lib_x86.dll không đăng ký thư viện, và %SystemRoot%\SysWow64\regsvr32 lib_x86 cũng thất bại, cố gắng để tải lib_x86 để ứng dụng Dependency Walker để xem toàn bộ danh sách các phụ thuộc. Nếu bất kỳ mục nào có kiến ​​trúc 64 bit, đây là lý do, tại sao regsvr32 không thể tải thư viện 32 bit.

26

Đối với 32 DLL bit trong các phiên bản Windows 64 bit:

  1. Sao chép whatever.dll để c:\windows\sysWOW64\
  2. mở một dấu nhắc CMD as administrator (rất quan trọng)

Trong cửa sổ CMD:

  1. CD c:\windows\sysWOW64\
  2. regsvr32 whatever.dll

Bạn sau đó sẽ được thực hiện các regsvr 32-bit (c:\windows\sysWOW64\regsvr.exe) trên một dll 32 bit

+3

+1 Sự căng thẳng của bạn vào thời điểm chạy khi quản trị viên đã cứu mạng tôi! :) – bluish

+2

Nếu bạn không chạy với tư cách quản trị viên, nó sẽ nói rằng tiến trình cài đặt đã thành công, nhưng nó sẽ không được đăng ký. Không có phản hồi nào khác mà bạn sẽ nhận được (đập bạn, Microsoft!). – neves

-1

Cố gắng chạy nó tại Framework64.

Ví dụ:

  • 32 chút

    C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe D:\DemoIconOverlaySln\Demo\bin\Debug\HandleOverlayWarning\AsmOverlayIconWarning.dll /codebase 
    
  • 64 chút

    C:\Windows\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe D:\DemoIconOverlaySln\Demo\bin\Debug\HandleOverlayWarning\AsmOverlayIconWarning.dll /codebase 
    
+0

Điều này (regasm.exe) chỉ dành cho các hội đồng .NET. –

+0

Ok. Tôi trả lời câu hỏi, quan trọng là bạn hiểu được cấp độ. NET lắp ráp như thế nào –

2

http://onerkaya.blogspot.com/2013/03/register-com-dll-on-windows-64-bit.html

Truy xuất nhà máy sản xuất lớp COM cho thành phần với CLSID {...} không thành công do lỗi sau: 80040154 Lớp không được đăng ký (Ngoại lệ từ HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

nếu bạn thử điều này;

c: \ windows \ system32 \ regsvr32.exe < filename> .dll

bạn vẫn có thể lấy ngoại lệ này. vì vậy cài đặt nâng cao IIS-pool, Kích hoạt ứng dụng 32 bit: true;)

+0

IIS-> hồ bơi Cài đặt nâng cao, Kích hoạt ứng dụng 32 bit: đúng điều này thực sự giải quyết được vấn đề. 1 cho nó. –

3

Tôi tin rằng, mọi thứ đã thay đổi ngay bây giờ. Trên My Win 2008 R2 Box, tôi đã có thể đăng ký một dll 32 bit với bản 64 bit vì phiên bản 64 bit có thể phát hiện bit mục tiêu và sinh ra một bản vá 32 bit mới từ thư mục% SYSWOW%.

Tham khảo: Registering a 32 bit DLL with 64 bit regsvr32

+0

'regsvr32' đã được làm việc xung quanh vấn đề bitness trong thời gian dài, tôi cho rằng ngay từ đầu. Nếu bạn đang reg'ging một DLL 32-bit với 64-bit 'regsvr32', sau này phát hiện vấn đề và bắt đầu trong phiên bản 32-bit của' regsvr32' và chuyển tiếp đăng ký ở đó. Điều này cũng hoạt động tốt theo hướng ngược lại. –

+0

@RomanR .: Tôi có thể đoán được nhưng nhìn thấy câu hỏi SO này và bài viết KB support.microsoft.com/kb/282747, điều này sẽ khiến tôi ngạc nhiên. – Abhijit

0

tôi đã nhận được báo lỗi "Các module có thể tương thích với phiên bản này của cửa sổ" cho cả hai phiên bản của regsvr32 (32 bit và 64 bit). Tôi đã cố gắng để đăng ký một DLL được xây dựng cho XP (32 bit) trong Server 2008 R2 (x64) và không có độ phân giải Regsr32 làm việc cho tôi. Tuy nhiên, đăng ký lắp ráp trong thích hợp. Net làm việc hoàn hảo cho tôi. C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ regasm.exe

1

Để đăng ký comm.dll hoặc .ocx trên Windows 7 32-bit, hãy làm như sau :

Sao chép .dll hay .ocx để c:\windows\system32 Gõ cmd trong Run menu, nó sẽ tìm kiếm cmd.exe, nhấp chuột phải và nhấp Run as Administrator

nó sẽ hiển thị một dấu nhắc tại c:\windows\system32

Loại

regsvr32 ocxname.ocx đăng ký .ocx

hoặc

loại regsvr32 dllname.dll để đăng ký.dll

+0

cho xp cũng được kiểm tra –

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