2011-08-10 23 views
6

Tôi có một bộ lọc DirectShow: MyFilter.axRegsvr32 hành vi kỳ lạ => regsvr32 không đưa ra bất cứ sự thành công hay thất bại nhắn

Khi tôi cố gắng đăng ký MyFilter.ax với tiện ích regsvr32 nó mang lại cho NO lỗi hoặc bất kỳ thông điệp (thành công hay thất bại). Nhưng bộ lọc không được đăng ký.

Tiện ích regsvr32 hoạt động tốt cho các bộ lọc khác của tôi.

Tại sao Regsvr32 không đưa ra bất kỳ thông điệp thành công hay thất bại nào? Làm cách nào để gỡ lỗi thành công Regsvr32 của tôi? Bất kỳ tiện ích thay thế nào để đăng ký bộ lọc DirectShow có thể cung cấp thông điệp có ý nghĩa?

nhất Wishes

Cập nhật:

tôi cài đặt hệ điều hành win7 sạch trên một máy ảo. Sau đó thử đăng ký. Hãy gửi lại một lần nữa mà không có phản hồi thư từ regsvr32.

Nhưng sau đó cài đặt lại hệ điều hành win7 sạch trên máy ảo. Sau đó, hãy cập nhật tất cả. Và sau khi tôi thực hiện cập nhật regsvr32 làm việc và cài đặt bộ lọc của tôi .... Tôi không biết những gì gây ra thất bại và loại cập nhật sửa chữa nó. Hoặc là nó thực sự là một vấn đề cập nhật ...

Trả lời

1

Kiểm tra xem bạn không gọi regsvr32 với /s tùy chọn

+1

không ... tôi không gọi regsvr32 với chế độ im lặng/s. chỉ cần sử dụng regsvr32 MyFilter.ax. – Novalis

1

Bạn can implement an application like regsvr32 yourself, bạn chỉ cần tải dll mục tiêu của bạn và gọi hàm DllRegisterServer. Bạn có thể triển khai nó trong C# ví dụ bằng cách sử dụng khai báo p/invoke sau:

[DllImport("yourdll.ax")] 
private static extern int DllRegisterServer(); 

Bạn có thể thu hẹp vấn đề theo cách này.

Cập nhật:

Tôi sẽ thử cài đặt Windows 7 Platform SDK và biên dịch bộ lọc DirectShow của bạn dựa vào đó. Tôi đã thấy các vấn đề tương thích trước đây với các phiên bản DirectX cũ hơn trong Windows 7 (thậm chí thiếu các dll), mặc dù tôi không giữ tham chiếu (nếu ai đó đọc tài liệu này có tham khảo, hãy đăng nó).

+0

Vâng, tôi đã thu hẹp vấn đề. Gỡ lỗi regsvr32 với Dependency Walker. Nhưng không cho phép đăng nhập meaninfull ... Nó chỉ nhận được lỗi vi phạm Acess chung ... Hoạt động của tôi dll dll bằng cách nào đó nhập trạng thái không hợp lệ trên một số máy. Nhưng không phải tất cả máy móc. Tôi thử nghiệm nó trên Windows 7. – Novalis

+1

Có lẽ bạn đang cố gắng để đăng ký một dll 32 bit trong một hệ điều hành 64 bit? Nếu đó là trường hợp thì bạn cần phải sử dụng c: \ windows \ syswow64 \ regsvr32.exe thay vì c: \ windows \ system32 \ regsvr32.exe – yms

+0

Hoặc bạn có thể thiếu thư viện phụ thuộc, như vc-redist. Bạn đã tạo tệp .ax này? – yms

3

Điều gì có thể xảy ra và thể hiện hành vi được đề cập là ở đâu đó trong bộ lọc của bạn, bạn đang ở trong vòng lặp chết hoặc chờ đợi vô hạn, do đó DllRegisterServer của DLL không bao giờ trả về. Trong trường hợp này, bạn sẽ có thể thấy rằng mỗi lần bạn thử trình quản lý tác vụ cho bạn thấy một tiến trình chạy regsvr32.exe khác, có hoặc không có mức tiêu thụ CPU.

Nếu đây là những gì bạn đang có, bạn sẽ muốn đính kèm với debugger và xem chính xác nơi bạn có vòng lặp chết ở đó ...

+1

Tôi giải quyết nó. Có vẻ như activex không thể tìm thấy một dll thứ ba ... Nhưng thay vì nói một cách duyên dáng, regsvr32 nhập trạng thái không hợp lệ .. Debug không cung cấp thông tin giá trị – Novalis

1

Tôi có vấn đề này quá và đây là những gì tôi đã làm để tìm ra những gì đã sai:

Đặt dll làm dự án khởi động.
Đến Configuration Properties -> Debugging: Set Command để c:\windows\syswow64\regsvr32.exe (hoặc phiên bản 32 bit nếu bạn đang ở trên một hệ thống 32 bit trong c:\windows\system32\regsvr32.exe)
Đặt Arguments Command để đường dẫn đầy đủ của dll
Run của bạn trong debug chế độ, bạn sẽ thấy cửa sổ bật lên mà dll của bạn được đăng ký chính xác, sau đó thực hiện sẽ treo.
Nhấp để tạm dừng thực hiện
Kiểm tra cửa sổ Gỡ lỗi chủ đề và kiểm tra xem chuỗi nào hiện đang hoạt động. Kiểm tra ngăn xếp cuộc gọi của họ vì hầu hết các chủ đề (trong trường hợp của tôi) được treo trong ntdll.dll

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