1
我有下面的代碼,它編譯在GCC下,但在visual studio下編譯時會拋出錯誤'expected an identifier'。GCC定義爲VS
#define CALLING_CONVENTION WINAPI
#define PROXY_PROTOTYPE(FUNCTION_NAME) \
void (FUNCTION_NAME)(void)
#define PROXY_FUNCTION(FUNCTION_NAME) \
static CALLING_CONVENTION PROXY_PROTOTYPE(*_##FUNCTION_NAME) = NULL; \
CALLING_CONVENTION PROXY_PROTOTYPE(FUNCTION_NAME) { \
POP_EBP __asm__("jmp *__"#FUNCTION_NAME); \
}
#define CALL_FUNCTION(FUNCTION_NAME) \
static CALLING_CONVENTION FUNCTION_NAME##_(*_##FUNCTION_NAME) = NULL; \
CALLING_CONVENTION FUNCTION_NAME##_(FUNCTION_NAME)
#define CALL_FUNCTION2(FUNCTION_RET, FUNCTION_NAME, FUNCTION_ARGS, ...) \
static CALLING_CONVENTION FUNCTION_RET (*_##FUNCTION_NAME)(FUNCTION_ARGS) = NULL; \
CALLING_CONVENTION FUNCTION_RET FUNCTION_NAME(FUNCTION_ARGS)
PROXY_FUNCTION(origFunc)
顯然,在編譯器和它們的定義的解釋有差別,但我不知道如何糾正它VS.我嘗試查找錯誤,但它的通用性似乎可能是任何數量的東西。 任何幫助表示讚賞。
你確定這個問題是不是與ASM語法? GCC和MSVC具有完全不同的內聯asm語法... – kusma