1

我正在将汇编代码移植到 C++,但在移植其中的一部分时遇到了一些问题。

我有一个指针声明为:

void* function;

它指向一个函数调用:

void* function = getfunction(lib, fname);

我有一个必须迁移到 C++ 的内联汇编代码:

__asm { call function }

如何在 C++ 中调用这个指针?

请注意,参数libfname的类型为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 回答