Делаю колбэк на изменения размеров окна, и реагирования на изменение размера рендерера. Хорошо, объявил typedef
, класс окна и класс рендерера находятся в разных библиотеках. Сделал объявление:
class renderer;
typedef bool(__thiscall renderer::*renderer_resize_callback_t)(unsigned, unsigned) const;
Далее, после того как рендерер был создан, записываю указатель на метод ресайза в класс окна:
class API_WINDOWS window
{
...
renderer *p_renderer_;
renderer_resize_callback_t m_resize_callback_t_;
public:
...
void set_resize_callback(direct2d::renderer_resize_callback_t resize_callback_t);
};
void window::set_resize_callback(const renderer_resize_callback_t resize_callback_t)
{
m_resize_callback_t_ = resize_callback_t;
}
class API_RENDERER renderer
{
protected:
ID2D1Factory* p_factory_;
ID2D1HwndRenderTarget* p_render_target_;
public:
renderer(const void* window_handle, int w, int h);
~renderer();
void draw() const;
bool __thiscall resize_target(unsigned width, unsigned height) const;
renderer() = delete;
renderer(const renderer&) = delete;
renderer(const renderer&&) = delete;
renderer& operator=(const renderer&) = delete;
renderer& operator=(const renderer&&) = delete;
};
bool __thiscall renderer::resize_target(const unsigned width, const unsigned height) const
{
const HRESULT result = p_render_target_->Resize(D2D1::SizeU(width, height));
return !(FAILED(result));
}
Далее пытаюсь записать указатель на класс рендерера и на метод ресайза в класс вызовом метода set_resize_callback
:
window wnd(1024, 768);
renderer renderer(wnd.get_window_handle(), 1024, 768);
wnd.set_renderer(&renderer);
wnd.set_resize_callback(&renderer::resize_target);
Но после того как будет вызван метод, произойдет исключение:
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
Как я понял в нем говорится о том, что не совпадает соглашение о вызовах, и оно повредило стэк. Но как? В определении прототипа явно указано соглашение, так же как и у метода.
Можно ли это исправить?
Виртуальный выделенный сервер (VDS) становится отличным выбором
После вставки носителя я получу сначала событие dbch_devicetype с deviceinterface, а затем с volume и если накопитель вставлялся 1, то очевидно оба события будут...
Доброе! Есть следющий код:
Я получаю параметры с командной строки cmd и вывожу их, затем нужно найти в этой папке с которой запущен скрипт файл с наибольшим размером,...
Кто сталкивался с данной проблемой при работе с OpenCV? Язык С++, работаю в VS2013