私はホットな2つのクラスを持っています。そのうちの 1 つが画像で、もう 1 つがページであるとします。Image オブジェクトは OnPointerPressed イベントを受け取ります。それが発生した場合、Page calss から関数を呼び出したいと思います。問題は、ユニオン ハックを使用してメンバー関数のアドレスをイメージに渡すまで、この関数が定義されないことです。このメソッドが Image クラスから呼び出されると正常に動作しますが、メソッド内では Page オブジェクトとそのメンバーが見えません。
MainPage::MainPage(void)
{
//.......
image1->OnPointerPressedHandler->add(&MainPage::imageMousePressed);
}
void MainPage::imageMousePressed(STObject* sender, STPointerEventArg * args)
{
void * dsda = this; //the address of this is something wierd
pres = true;
}
誰か少し手伝ってくれませんか?
template<class T>
void add(T const & x)
{
union hlp_t{
void * v_ptr;
T t;
};
hlp_t a;
a.t = x;
functions->addLast(a.v_ptr);
}
template<class ARG>
void trigger(SENDERTYPE sender, ARG arg)
{
STLinkedListIterator<void *>* it = functions->createIteator();
if(it != nullptr)
{
do
{
void (*callback)(SENDERTYPE,ARG) =static_cast<void (*)(SENDERTYPE,ARG)>(it->getData());
callback(sender,arg);
/*
void * myVoid = it->getData();
__asm
{
push [arg];
push [sender];
call [myVoid];
}
*/
it->next();
}while(!it->EOL());
}
}