2013-08-07 68 views
5

Tôi nhận được một lỗi lạ trên một chương trình SharpDX mà tôi đã tạo.chương trình đã thoát với mã -1073610751 (0xc0020001)

Chương trình có chứa một biểu mẫu MainForm, được kế thừa từ SharpDX.Windows.RenderForm (Tôi đang thực hiện Direct3D 9). Tôi có một số logic mà giết chết chương trình bằng cách gọi MainForm.Close(), và nó hoạt động hoàn hảo.

Tuy nhiên, khi tôi đóng biểu mẫu bằng nút X hoặc nhấp đúp vào góc trên cùng bên trái của màn hình, chương trình sẽ kết thúc bằng mã -1073610751 (0xc0020001).

Đây là một sự khó chịu tương đối nhỏ, bởi vì nó chỉ xảy ra khi chương trình kết thúc, do đó, nó không thực sự quan trọng nếu nó thoát với một lỗi, bởi vì nó thực sự là kết thúc.

Tuy nhiên, lỗi này không xảy ra khi tôi đặt điểm ngắt tại dòng cuối cùng của Main(). Nếu tôi làm như vậy, và sau đó đóng cửa sổ như tôi đã giải thích, điểm ngắt được nhấn và tiếp tục kết thúc chương trình bằng mã số 0.

Ngoài SharpDX và một DLL C thuần túy tôi đang gọi đến một quá trình một số dữ liệu , Tôi không làm mã hỗn hợp, hoặc bất kỳ thứ kỳ lạ nào khác.

Tôi đã xem xét xung quanh, nhưng mã này dường như có liên quan đến các ràng buộc chuỗi? những người khác dường như có vấn đề này khi làm công cụ hỗn hợp C++/CLI kỳ lạ, nhưng tôi không làm bất cứ điều gì như thế.

Bất kỳ ý tưởng nào? ít nhất là làm thế nào để có được thông tin ngắn gọn hơn về mã lỗi này?

+1

Kiểm tra liên kết này ... http://blogs.msdn.com/b/cbrumme/archive/2003/04/15/51318.aspx - có vẻ như có khả năng từ mô tả của bạn rằng một số thông báo xử lý (hoặc các cuộc gọi lại khác từ COM cho chương trình của bạn) được thiết lập để gọi lại cho bạn - hoặc các phương thức được quản lý của SharpDX và không được dọn dẹp (đúng lúc). Nếu những cuộc gọi lại sau đó xảy ra sau khi thời gian chạy được quản lý tắt, bạn sẽ nhận được lỗi đó. Nếu lý thuyết đó giữ, đặt một điểm ngắt trên dòng cuối cùng * xuất hiện * để cho phép thời gian để làm sạch. – JimmiTh

+0

Có lẽ bạn nên gỡ lỗi mã cũng hiển thị một số mã thực sự sẽ giúp nếu đây là một bên thứ 3.DLL có lẽ bạn cần phải 'Vứt bỏ' các đối tượng được tạo thủ công. Những gì bạn đã cố gắng như vậy đến nay ..? – MethodMan

+1

Có thể nào đây? http://connect.microsoft.com/VisualStudio/feedback/details/336844/static-variable-in-native-method-causes-exception-c0020001-during-process-exit –

Trả lời

3

Đây là lỗi RPC ở mức rất thấp. Mà có khả năng được sử dụng trong chương trình của bạn, nó là giao thức cơ bản trên đầu mà COM chạy. Có rất nhiều ứng cử viên, SharpDX tự sử dụng lớp interop COM để thực hiện các cuộc gọi DirectX. Và DirectX chính nó là rất có khả năng để thực hiện các loại cuộc gọi đến trình điều khiển video của bạn.

Đây cũng là loại mã lỗi mà bạn mong muốn được kích hoạt nếu có sự cố đơn đặt hàng tắt máy. Giống như sử dụng giao diện COM sau khi nó đã được phát hành. Tắt chương trình một cách sạch sẽ có thể là một vấn đề khó giải quyết, đặc biệt khi có rất nhiều chủ đề. Có trong bất kỳ ứng dụng DirectX nào. Nó cũng rất dễ dàng để bỏ qua một vấn đề như vậy, ngay cả khi nó được biết đến và ghi lại trong cơ sở dữ liệu lỗi của ai đó. Bởi vì, như bạn đã lưu ý, chương trình khác sẽ tắt mà không có bất kỳ ngoại lệ khó chịu nào. RPC đã ngăn không cho nó bị thổi, bạn sẽ thấy mã lỗi được tạo ra.

Có rất ít bạn có thể tự mình giải quyết vấn đề này, đây là mã bạn không viết và bạn sẽ không bao giờ tìm thấy lập trình viên đã làm. Nếu bạn thấy thông báo ngoại lệ đầu tiên trong cửa sổ Output thì bạn có thể kích hoạt trình gỡ rối không được quản lý, sử dụng Debug + Exceptions và đánh dấu vào hộp kiểm Thrown cho ngoại lệ Win32, kích hoạt máy chủ Microsoft Symbol và bạn sẽ nhận được một stack trace khi ngoại lệ được ném. Hãy coi chừng điều này sẽ được trong ruột của mã nguồn gốc không có nguồn để xem xét. Nhưng nó có thể pin-điểm DLL đó gây ra vấn đề. Vẫn không có gì bạn có thể làm để sửa chữa DLL đó. Tôi khuyên bạn nên cập nhật trình điều khiển video, nguồn gặp sự cố phổ biến nhất. Đó là về như xa như bạn có thể mang nó.

+0

Câu trả lời hay. Thật không may, tôi có thể thấy không có ngoại lệ cơ hội đầu tiên ném đăng nhập trong cửa sổ đầu ra. Tôi cũng sẽ thử với WinDBG. –

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