У меня есть следующее определение класса:
class IRenderable {
public:
virtual void Render( wxBitmap * ) = 0;
}
class MyClass : public wxWindow, public IRenderable {
public:
/* costructor, destructor etc... */
void RenderBitmap( wxBitmap *bitmap )
{
// code
}
}
где wxWindow и wxBitmap - классы, принадлежащие библиотеке wxWidgets (переносимая библиотека C ++ для написания приложений с графическим интерфейсом).
Я использую Visual C. Следующий фрагмент кода неправильный:
MyClass *c = new MyClass(...);
wxWindow *w = (wxWindow *)c;
IRenderable *r_page = (IRenderable *)w;
// bitmap is allocate somewhere else
r_page->RenderBitmap( bitmap );
потому что я получаю ошибку во время выполнения:
Ошибка проверки времени выполнения # 0 - значение ESP не было сохранено должным образом
через вызов функции. Обычно это результат вызова
функция объявлена с одним соглашением о вызовах с указателем на функцию
объявлено с другим соглашением о вызовах.
Что происходит?
Что я делаю, так это следующее. Сторонняя библиотека (wxAUI) получает указатели на wxWindow для управления ими. Я вставил wxWindow (MyClass), чтобы добавить определенный код. Поэтому вместо управления объектами wxWindows я использую объекты MyClass.
В некоторых ситуациях я прошу wxAUI вернуть мне указатель wxWindow «текущего» окна, который должен быть указателем на объект MyClass. Я хочу вызвать метод RenderBitmap () для этих объектов, поэтому мне нужно привести его к IRenderable, но получить эту ошибку во время выполнения ...
У меня нет разрешения RTTI и нет сейчас, если это решит проблему ...