1

アセンブリ コードを C++ に移植していますが、その一部の移植に問題があります。

次のように宣言されたポインターがあります。

void* function;

そしてそれは関数呼び出しを指しています:

void* function = getfunction(lib, fname);

C++ に移行する必要があるインライン アセンブリ コードがあります。

__asm { call function }

C++でこのポインタを呼び出す方法は?

lib引数とfnameは 型であることに注意してくださいvoid*

そしてvoid* function によって返される値を指しますgetfunction()

4

2 に答える 2

1

以下では、関数呼び出し全体がカプセル化されていると仮定しています。

__asm { call function }

その場合、これは次のように宣言できる関数ポインタです。

void (*function)(void);

ブロックは__asmパラメーターをスタックにプッシュしません。したがって、パラメーター リストは空です。また、__asmブロックは戻り値を抽出しません。したがって、関数にはvoid戻り値の型があります。

同じ方法で関数ポインターに代入します。

function = getfunction(lib, fname);

そして、あなたはそれを次のように呼びます:

function();
于 2013-04-13T15:53:57.473 に答える
0

次の例を見てください。

// ptrFunc is the name of the pointer to the getFunction
void* (*ptrFunc)(void*, void*) = &getfunction;
// ... Declaring whatever lib and fname are
// Now call the actual function by using a pointer to it
ptrFunc(lib, fname);
// Another form of how to call getFunc might be :
(*ptrFunc)(lib, fname);

また、次のような別の関数に関数ポインタを渡すこともできます。

void *getFunction(void* lib, void* fname)
{
   // Whatever
}

void myFunction( void* (*ptrFunc)(void*, void*) )
{
   // void *lib = something;
   // void *fname = something else;
   ptrFunc(lib, fname);
}

int main()
{
    void* (*ptrFunc)(void*, void*) = &getfunction;
    // Passing the actual function pointer to another function
    myFunction(ptrfunc);
}
于 2013-04-13T15:43:20.817 に答える