2010-10-14 48 views
6

Khi một ứng dụng được chạy từ bên trong IDE và trình gỡ rối được đính kèm ngoại lệ 'Ngoại lệ bên ngoài C0000008' được nâng lên khi nó cố kết nối với điều khiển ActiveX đã nhập.Delphi - Ngoại lệ bên ngoài C0000008 khi ứng dụng được chạy từ bên trong IDE

Nếu ứng dụng chạy độc lập hoặc tùy chọn Rad Studio/Tùy chọn gỡ lỗi/Gỡ lỗi tích hợp được bỏ chọn, chương trình hoạt động như mong đợi, không có ngoại lệ và điều khiển ActiveX trả về kết quả mong đợi.

Có các điều khiển ActiveX khác trong dự án, tất cả đều hoạt động tốt.

Tôi đã thử: - Cài đặt lại điều khiển ActiveX - Re-Nhập khẩu các điều khiển ActiveX - Loại bỏ bất kỳ phần mềm có thể gây ra xung đột (chuyên gia/plug-in vv) - Tắt các ứng dụng đang chạy và dịch vụ vv trong trường hợp họ đang gây ra xung đột

Tìm kiếm Google, Có vẻ như những người khác đã gặp sự cố tương tự, nhưng không tìm thấy lỗi nào (ngoài tắt gỡ lỗi Tích hợp, nhưng rõ ràng đó không phải là tùy chọn hợp lệ.

Có ai có bất kỳ ý tưởng nào không để tìm cách khắc phục sự cố này?

Tôi đang sử dụng Delphi 2007

Trả lời

2

C0000008 là trạng thái được trả lại cho một tay cầm không hợp lệ. Hãy chắc chắn rằng wrapper của bạn khi nó đi để tạo ra các đối tượng cho nó một xử lý thích hợp và không nil (giả sử nó đang bị rơi vì một cửa sổ xử lý).

Vì ứng dụng chạy tốt khi không được đính kèm với trình gỡ lỗi, tôi giả định rằng trình bao bọc đang xử lý tình trạng này một cách duyên dáng nên lỗi rất có thể xảy ra bên trong khối thử/ngoại trừ.

2

Đó là sự kết hợp giữa hành vi chức năng không rõ ràng và tùy chọn IDE.

MSDN CloseHandle

Nếu ứng dụng đang chạy dưới một trình gỡ lỗi, chức năng sẽ ném một ngoại lệ nếu nó nhận được một trong hai giá trị xử lý đó không phải là hợp lệ hay một giá trị giả xử lý. Điều này có thể xảy ra nếu bạn đóng một xử lý hai lần, hoặc nếu bạn gọi CloseHandle trên một tay cầm được trả về bởi hàm FindFirstFile thay vì gọi hàm FindClose.

Vì vậy, có hai tùy chọn - kiểm tra mã cho một vị trí mà một số xử lý không hợp lệ đang bị đóng hoặc tắt thông báo của IDE về ngoại lệ này. Truy cập Tools > Options > Debugger options > Emb debuggers > Native OS exceptions, tìm mục Invalid Handle và thay đổi On resume tùy chọn thành Run handled. Điều này làm việc cho tôi.

Tín dụng cho giải pháp này đi tới _Vasilisk_ từ diễn đàn sql.ru.

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