コールバック関数のコードを記述する必要があります (ATL 内から呼び出されますが、それはそれほど重要ではありません)。
HRESULT callback( void* myObjectVoid )
{
if( myObjectVoid == 0 ) {
return E_POINTER;
}
CMyClass* myObject = static_cast<CMyClass*>( myObjectVoid );
return myObject->CallMethod();
}
ここで、void*
は へのポインタであることが保証されているCMyClass
ため、static_cast
合法です。私の懸念は、コードが (少なくとも新しいバージョンの Visual C++ に対して) 可能な限り移植可能でなければならないということです。だから超偏執的になるために、私はCMyClass*
ポインタもチェックする傾向があります - つまり、それがnullであることが判明した場合はどうなりますか?
if( myObjectVoid == 0 ) {
return E_POINTER;
}
CMyClass* myObject = static_cast<CMyClass*>( myObjectVoid );
if( myObject == 0 ) {
return E_POINTER;
}
2番目のチェックは合理的ですか?static_cast
null 以外のポインターを null ポインターに変えることは可能ですか?