我想在C++ Builder中長時間工作後開始使用mingw(MinGW-w64)和eclipse。我很困惑。哪個gcc發行版支持__declspec(dllexport)_cdecl和_stdcall
我的工作主要圍繞供應商提供的以MSVC爲中心的API。它由3個頭文件和幾個庫組成。我能夠在C++ Builder中使用它們的頭文件,但是運行了很多g ++的問題。
#define GX_WRAPPER_FUNC __declspec(dllexport)
#define GX_STANDARD_FUNC
#define GX_WRAPPER_CALL _cdecl
#define GX_STANDARD_CALL _stdcall
#define GX_OBJECT_PTR void*
#define GX_VAR
#define GX_CONST const
#define GX_VOID void
#define GX_LONG long
#define GX_DOUBLE double
#define GX_HANDLE long
#define GX_LONG_PTR long*
#define GX_DOUBLE_PTR double*
#define GX_HANDLE_PTR long*
#define GX_ASTR_PTR char*
#define GX_WSTR_PTR wchar_t*
#if defined(GEO_UTF8)
#define GX_STR_PTR GX_ASTR_PTR
#elif defined(_UNICODE)
#define GX_STR_PTR GX_WSTR_PTR
#else
#define GX_STR_PTR GX_ASTR_PTR
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*---------------- Copy_3DN[_public] ----------------*/
GX_WRAPPER_FUNC GX_LONG GX_WRAPPER_CALL
Copy_3DN(GX_VAR GX_OBJECT_PTR,
GX_CONST GX_HANDLE_PTR,
GX_CONST GX_HANDLE_PTR);
GX_STANDARD_FUNC GX_LONG GX_STANDARD_CALL
Std_Copy_3DN(GX_VAR GX_OBJECT_PTR,
GX_CONST GX_HANDLE_PTR,
GX_CONST GX_HANDLE_PTR);
...hundreds more like this
這產生了一大堆「預期初始化器之前」錯誤。
我已經通過重新定義前4所定義這樣取得了一些成績:
#ifdef __GNUC__
#define GX_WRAPPER_FUNC __attribute__ ((dllexport))
#define GX_STANDARD_FUNC
#define GX_WRAPPER_CALL
#define GX_STANDARD_CALL
#else
#define GX_WRAPPER_FUNC __declspec(dllexport)
#define GX_STANDARD_FUNC
#define GX_WRAPPER_CALL _cdecl
#define GX_STANDARD_CALL _stdcall
#endif
但遇到當後來barfs
GX_WRAPPER_FUNC GX_LONG GX_WRAPPER_CALL
RegisterResourceTracking_GEO(GX_VAR GX_OBJECT_PTR,
GX_CONST GX_LONG_PTR,
GX_OBJECT_PTR,
void (_stdcall *param3)(void*));
我真的想使用這些頭,不編輯它們,我已經看到一些提示,指出gcc發行版的正確選擇可能支持這種語法,但我已經嘗試了一些數字,但沒有運氣。我已經嘗試了MinGW-w64和Nuwen和TDM的i686和x86-64變體。我並不關心跨平臺問題,因爲主機應用程序只有Windows,並且由於我自己固執的原因,我不想放棄並切換到MSVC。
那麼,有沒有gcc發行版支持這種語法?否則,阻力最小的路徑是什麼?
歡呼
您是否嘗試過#define __stdcall __attribute __((stdcall))? –
單下劃線版本失敗了,使用兩個。所以__stdcall而不是_stdcall。 –
@BenVoigt工作。你可以把它作爲答案發布,以便我可以接受它嗎? – marcp