1

__thiscall次のエラーが表示されて使用できません。
error C4234: nonstandard extension used : '__thiscall' keyword reserved for future use

私はdllからクラス関数を呼び出しています:

typedef void(*SETDIRPROC)(void*,D3DXVECTOR3&);

void ZMyCharacter_SetDirection_Rev( void )
{
    if( pZMyCharacter == 0 )
    {
        printf( "cannot set direction now\n" );
        return;
    }
    SETDIRPROC SetDir_Proc = (SETDIRPROC)0x004A2AF0;
    D3DXVECTOR3 pos = D3DXVECTOR3(4.0f,2.0f,1.0f);
    SetDir_Proc( pZMyCharacter, pos );
}

pZMyCharacter実アプリケーション上の実へのvoid*ポインタです。class ZMyCharacter動作しますが、呼び出し規約が異なることを警告するデバッグ エラー (無視できます) が表示されます。デフォルトでSETDIRPROCはであり、に変更することはできません。__cdecl__thiscall

typedef void(__thiscall *SETDIRPROC)(void*,D3DXVECTOR3&);//エラー C4234

どうすればこれを回避できますか?

4

4 に答える 4

2

私はそれが次のように見えるべきだと思います:

typedef void(__thiscall &ZMyCharacter::*SETDIRPROC)(D3DXVECTOR3&);
SETDIRPROC SetDir_Proc = (SETDIRPROC)0x004A2AF0;
static_cast<ZMyCharacter*>(pZMyCharacter)->SetDir_Proc( pos );

__thiscall宣言したようなフリー関数ではなく、メンバー関数ポインターで使用することを意図しています。上記は、コンパイラが必要とするもの (メンバー関数型のキャストおよび呼び出し) に近いはずです。

于 2013-06-23T02:00:02.713 に答える