1、下载 SDK,得到相应的头文件和静态链接库 .a;
2、打开 *.h ,然后挨个翻译,翻译的规则:
- enum 是枚举类型,直接翻译成 delphi 对应的枚举类型就可以了
- NSENUM 直接翻译成对应的常量定义
- @interface 声明的是一个接口,在 Delphi 中需要做简单的对应
- 2.1、声明一个对应的类的类型,如果 interface 继承自 NSObject,那么这个类型继承自 NSObjectClass。按 Delphi 的习惯,假设 @interface 的原始名为 A,则声明的类型为 AClass,继承自 NSObjectClass。然后按下 Ctrl+Shift+G 生成一个唯一的GUID,这个值是给 Delphi 自己玩的,所以与原始的 interface 无关,自己生成就好。
- 2.2、声明一个对应的接口类型,这个类型名和 @interface 声明的类型名一致,也继承自同样的对象,如NSObject。同上生成一个唯一的接口 GUID。
- 2.3、将 @interface end 之前的成员,+ 后面跟的函数,放到 2.1 中定义类的类型接口中,- 后面跟的函数,放到 2.2 中定义的接口类型中,@property 后面的成员,放到 2.2 定义的接口中。
- 2.4、@property 的成员放的时候,请按下面的规则处理:
(1)、如果没有特别说明,则对应两个函数,一个函数和属性的名称一致,另一个函数为 set+首字母大写的属性名称。
(2)、如果指定了 getter 和 setter ,则 getter 对应的是属性读函数的名称, setter 对应的是属性写函数的名称。
(3)、如果指定的 readonly,则只有读函数,没有写函数。 - 2.5、接口中的所有函数的调用规则全部为 cdecl。
- 2.6、在每个接口实现完成后,加入 T+接口类型名=class(TOCGenericImport<2.1中的类的类型名,2.2中的接口类型名>) end; 这一行定义,这样就可以让 Delphi 自动导入对应的类型接口。
- 2.7、如果 .h 文件中,变量或函数名使用了 Delphi 保留的关键字,则在前面加上 “&” 符号,如 type 转换为 &type 即可。
- 2.8、@protocol 的东西是继承自 IObjectiveC 的接口,它没有 2.2 类似的部分。
- 2.9、函数声明中带有 XXX: 参数1类型 参数1 YYY: 参数2类型 参数2 这样子的,需要用[MethodName(‘XXX:YYY:’)] 这样处理
- 注意要引入相关的单元,最基本的单元需要引入:System.Classes, iOSapi.Foundation, Macapi.ObjectiveC。实际微信接口还需要引入 iOSapi.UIKit 单元,具体翻译就根据需要引入。
如我们翻译一段简单的 Object C 接口:
/*! @brief 该类为微信终端SDK所有请求类的基类 * */ @interface BaseReq : NSObject /** 请求类型 */ @property (nonatomic, assign) int type; /** 由用户微信号和AppID组成的唯一标识,发送请求时第三方程序必须填写,用于校验微信用户是否换号登录*/ @property (nonatomic, retain) NSString* openID; @end
Delphi 翻译后结果:
BaseReqClass = interface(NSObjectClass) ['{06A21E95-7159-4F90-B535-9ED96E1DF375}'] end; BaseReq = interface(NSObject) ['{C36129E7-ABB1-47AA-A3B9-D70865DBAE24}'] { 请求类型 } function &type: Integer; cdecl; procedure setType(value: Integer); cdecl; { 由用户微信号和AppID组成的唯一标识,发送请求时第三方程序必须填写,用于校验微信用户是否换号登录 } function openID: NSString; cdecl; procedure setOpenID(value: NSString); cdecl; end; TBaseReq = class(TOCGenericImport<BaseReqClass, BaseReq>) end;
然后实际使用时,按照 Delphi 的规则创建 TBaseReq 相关成员方法及属性就好了。