我正在将汇编代码移植到C ++中,并且在移植部分代码时遇到了一些问题。
我有一个声明为:
的指针void* function;
它指向一个函数调用:
void* function = getfunction(lib, fname);
我有一个内联汇编代码,我必须迁移到C ++:
__asm { call function }
如何在C ++中调用此指针?
请注意,lib
和fname
参数的类型为void*
。
void* function
指向getfunction()
返回的值。
答案 0 :(得分:1)
在下文中,我假设整个函数调用由
封装__asm { call function }
在这种情况下,这是一个函数指针,可以这样声明:
void (*function)(void);
__asm
块不会将参数压入堆栈。因此参数列表为空。并且__asm
块不提取返回值。因此该函数具有void
返回类型。
您以相同的方式分配给函数指针:
function = getfunction(lib, fname);
你这样称呼它:
function();
答案 1 :(得分: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);
}