簡體   English   中英

將匯編代碼移植到C ++

[英]Porting assembly code to c++

我正在將匯編代碼移植到C ++,並且在移植一部分代碼時遇到一些問題。

我有一個聲明為的指針:

void* function;

它指向一個函數調用:

void* function = getfunction(lib, fname);

我有一個內聯匯編代碼,必須移植到C ++:

__asm { call function }

如何在C ++中調用此指針?

請注意,參數libfname的類型為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM