2014-04-01 50 views
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.我嘗試查找錯誤,但它的通用性似乎可能是任何數量的東西。 任何幫助表示讚賞。

+2

你確定這個問題是不是與ASM語法? GCC和MSVC具有完全不同的內聯asm語法... – kusma

回答