Tôi nhận được ngoại lệ thời gian chạy khi tôi cố gắng truyền một đối tượng đến giao diện mà tôi chắc chắn rằng nó thực hiện.Tài liệu tham khảo giao diện Downcasting
Tôi có giao diện như sau:
public interface class ISMILTimeContainer;
public interface class ISMILSequence : ISMILTimeContainer;
public interface class ISMILParallel : ISMILTimeContainer;
Tôi đã các lớp sau:
ref class TimeContainer : public ISMILTimeContainer;
ref class Sequence : public TimeContainer, ISMILSequence;
ref class Parallel : public TimeContainer, ISMILParallel;
Sau đó, tôi thử như sau:
ISMILTimeContainer^ container = getSequence(); // returns a Sequence^
ISMILSequence^ sequence = static_cast<ISMILSequence^>(container);
này ném một ngoại lệ lúc chạy -time:
Nền tảng :: InvalidCastException^tại vị trí bộ nhớ 0x04AFD83C. HRESULT: 0x80004002 Không có giao diện như vậy được hỗ trợ
Theo tôi có thể biết, điều này sẽ hoạt động. Có điều gì đó sai trái với những gì tôi đang cố gắng làm hay làm các triệu chứng cho biết vấn đề triển khai (có điều gì đó khác với những gì được yêu cầu ở trên)?
Bạn có thể hiển thị 'getSequence' không? Tôi đã cố gắng để repro mã của bạn và không nhận được một ngoại lệ. Đối với tôi nó hoạt động. Tất cả những gì tôi đã thay đổi là dòng gọi 'getSequence' thành cái này:' ISMILTimeContainer^container = ref new Sequence(); 'Có lẽ' getSequence' không trả về một 'Sequence'? –
Không có thứ gì như kế thừa một lớp trong WinRT. Nó được thực hiện nội bộ bằng cách sử dụng bố cục. Tôi nghĩ trong trường hợp này, bạn có thể sử dụng safe_cast, điều này sẽ hoạt động "trên toàn" và không chỉ lên và xuống. Hãy suy nghĩ về nó như là một diễn viên pathfinding tôi đoán. –