[英]Porting assembly code to c++
我正在將匯編代碼移植到C ++,並且在移植一部分代碼時遇到一些問題。
我有一個聲明為的指針:
void* function;
它指向一個函數調用:
void* function = getfunction(lib, fname);
我有一個內聯匯編代碼,必須移植到C ++:
__asm { call function }
如何在C ++中調用此指針?
請注意,參數lib
和fname
的類型為void*
。
void* function
指向getfunction()
返回的值。
在下面的內容中,我假設整個函數調用都由
__asm { call function }
在這種情況下,這是一個可以這樣聲明的函數指針:
void (*function)(void);
__asm
塊不會將參數壓入堆棧。 因此,參數列表為空。 並且__asm
塊不會提取返回值。 因此該函數具有void
返回類型。
您以相同的方式分配給函數指針:
function = getfunction(lib, fname);
您這樣稱呼它:
function();
看下面的例子:
// 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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.