2012-06-18 20 views
5

Tôi đã tự lo liệu mình có nên trả lại E_NOTIMPL hoặc E_NOINTERFACE từ các phương thức máy chủ COM của tôi hay không.Làm cách nào để chọn giữa E_NOTIMPL và E_NOINTERFACE?

Tôi có một lớp với hai hàm tôi đã ghi đè từ lớp mà tôi kế thừa, cả hai hàm này đều không thực hiện được vì chúng không thực sự được hỗ trợ tại thời điểm này, vì vậy tôi yêu cầu tôi nên sử dụng "chưa được triển khai" hoặc " không có giao diện "cho các hàm này trả về giá trị?

Có ai có quy tắc chung về thời điểm sử dụng không?

Trả lời

6

Nếu bạn thất bại trong việc thực hiện toàn bộ giao diện, sau đó QueryInterface của bạn có thể trở lại một cách rõ ràng E_NOINTERFACE, vì vậy mà không ai cố gắng để gọi bất kỳ các phương pháp của nó, hoặc bạn chỉ có thể thực hiện tất cả các phương pháp có thể trở lại E_NOTIMPL (nó thực sự có ý nghĩa để làm điều này trong một số trường hợp cạnh). Nếu bạn thực hiện một phần một giao diện, thì bạn không nên trả lại tất cả E_NOINTERFACE.

3

Nếu lớp học không cung cấp đầy đủ việc thực hiện giao diện được yêu cầu, thì trả về E_NOINTERFACE. Nếu một lớp không thực hiện phần thân/logic của một hàm giao diện thì trả về E_NOTIMPL.

2

Bạn (chính thức) triển khai giao diện, vì vậy E_NOINTERFACE không dành cho bạn. Nó xảy ra rằng bạn có các phương thức không được triển khai một cách hữu ích, vì vậy bạn nên trả về E_NOTIMPL.

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