首页 > 解决方案 > 错误:通过桥接头在 Swift 项目中使用旧的 Objective C 库后的预期标识符或“(”

问题描述

当我开始使用 Swift 学习 iOS 开发时,我对 Objective C 的经验非常少,我需要使用较旧的 ObjC 库。

我的 netsdk.h 库(文件有超过 50k 行)

#ifndef DHNETSDK_H
#define DHNETSDK_H

#if (defined(WIN32) || defined(_WIN32) || defined(_WIN64))

   ... 
#else    //non-windows

    #define CLIENT_NET_API extern "C"
    #define CALL_METHOD 
    #define CALLBACK
    ...

基本上在阅读了一些与此相关的问题后,我认为extern "C"下一行有问题

...
#define CLIENT_NET_API extern "C"
...

因此,我在许多使用 CLIENT_NET_API 的行上遇到错误,例如

expected identifier or '('
Expanded from macro 'CLIENT_NET_API'

我的第一次尝试是包裹#define CLIENT_NET_API extern "C"

#ifdef __cplusplus
extern "C" {
#endif

#define CLIENT_NET_API 

#ifdef __cplusplus
}
#endif

但是然后我在"C does not support default arguments"使用 CLIENT_NET_API 的所有行上都收到错误,例如这些

CLIENT_NET_API BOOL CALL_METHOD CLIENT_StartBackUpCase(LLONG lLoginID, const NET_IN_START_CASE_BACK_UP* pstInParam, NET_OUT_START_CASE_BACK_UP *pstOutParam, int nWaitTime = NET_INTERFACE_DEFAULT_TIMEOUT);

CLIENT_NET_API BOOL CALL_METHOD CLIENT_StopBackUpCase(LLONG lLoginID, const NET_IN_STOP_CASE_BACK_UP* pstInParam, NET_OUT_STOP_CASE_BACK_UP *pstOutParam, int nWaitTime = NET_INTERFACE_DEFAULT_TIMEOUT);

我认为它应该以其他方式包装,但我找不到在同一行上使用#define和关键字的示例extern

标签: iosobjective-cswiftxcode

解决方案


在这种情况下:

定义 CLIENT_NET_API 外部“C”

说,CLIENT_NET_APIextern "C"

因此,在您的情况下,您只需定义为empty existed preprocessor variable

#ifdef __cplusplus
extern "C" {
#endif

#define CLIENT_NET_API 

#ifdef __cplusplus
}
#endif

推荐阅读