0
我想用mingw32/VC實現我的DLL的跨平臺構建。
目前,一切都與明確的一面完美。但是我必須包裝在宏觀幾件事情對於VC(它是建立爲/ TC),例如:星號在參數名稱中用C預處理器
void __attribute__((fastcall)) do1 ( A*, B , C, D);
bool __attribute__((fastcall)) (*do2) (E*, F);
第一個是簡單,只需一個宏:
#ifdef __MINGW32__
#define __FASTCALL__ __attribute__((fastcall))
#elif _MSC_VER
#define __FASTCALL__ __fastcall
#else
#error "unsupported compiler"
#endif
問題來了與第二個。調用約定與函數指針應該看起來像
bool (__fastcall *do2) (E*, F);
我嘗試下面的宏(我跳過IFDEF部分):
#define __FASTCALLP__(func) (__attribute__((fastcall))(*##func))
#define __FASTCALLP__(func) (__fastcall *##func)
,或者用星號通功能名稱:
#define __FASTCALLP__(func) (__attribute__((fastcall))(##func))
#define __FASTCALLP__(func) (__fastcall ##func)
兩者均失敗
error: pasting "*" and "function_name" does not give a valid preprocessing token
我可以在我的方法中錯誤嗎?或者我必須ifdef整個代碼塊或將其分隔到不同的文件?
這是否工作:簡單的前'func'忽略''##? – 2015-03-19 11:01:49
呃....對我來說很愚蠢,不去檢查這麼簡單的方法:)請把它當作答案) – pugnator 2015-03-19 11:04:46