ios - 错误:通过桥接头在 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
解决方案
在这种情况下:
定义 CLIENT_NET_API 外部“C”
说,CLIENT_NET_API
让extern "C"
因此,在您的情况下,您只需定义为empty existed preprocessor variable
#ifdef __cplusplus
extern "C" {
#endif
#define CLIENT_NET_API
#ifdef __cplusplus
}
#endif
推荐阅读
- c++ - C++:如何在结构中定义类实例。类具有参数化构造函数
- ios - 使用 Xamarin.Forms 在 iOS 上更新 listview 文本绑定会导致闪烁
- python-poetry - python[poetry] 安装卡住了
- ios - UIApp 为 nil,这意味着我们无法将控制动作分派给它们的目标
- python - TypeError:无法处理值'
' 作为常量,因为它具有未知类型的 'function' - azure - 我们如何将问题数据从 HTML 文件导入 QnA Maker?
- flutter - PageView 指示点在 Persistent Bottomsheet Flutter 中不起作用
- c# - FtpWebRequest ConnectionGroupName 练习题
- classloader - powermockit 如何模拟私有方法
- modbus - 为什么在写入多个寄存器时需要寄存器数量和字节数?