我想在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