0

我正在使用 Delphi XE3 为 MAC OS X 开发应用程序,该应用程序使用第三方动态库 (.dylib) 进行工作。

目标库有我正在尝试转换为 Delphi 的 Objective C 头文件。几乎一切都很好,但只有一个接口只包含 @property 声明。

@interface ProductInitParams : NSObject
{
  NSString* ProductKey;
  NSString* ProductVendor;
  NSString* ProductName;
  NSString* ProductPackage;    
}
@property (nonatomic, retain) NSString* ProductKey;
@property (nonatomic, retain) NSString* ProductVendor;
@property (nonatomic, retain) NSString* ProductName;
@property (nonatomic, retain) NSString* ProductPackage;
@end

我试着写这样的东西:

ProductInitParams = interface(NSObject)['{149A7187-D3E1-4713-B2D1-6EA1801F4A7D}']
    property ProductKey: NSString read ? write ?;
    property ProductVendor: NSString read ? write ?;
    property ProductName: NSString read ? write ?;
    property ProductPackage: NSString read ? write ?;
end;

但我不知道要为读\写写什么。

有人知道怎么做这个吗?

PS 我查看了 Macapi.* 单位 - 没有关于编组属性的内容。

更新

在阅读了有关 @property 的 Apple文档后,我想出了这个解决方案。

ProductInitParams = interface(NSObject)['{149A7187-D3E1-4713-B2D1-6EA1801F4A7D}']
    procedure setProductKey(value: NSString); cdecl;
    procedure setProductVendor(value: NSString); cdecl;
    procedure setProductName(value: NSString); cdecl;
    procedure setProductPackage(value: NSString); cdecl;

    function ProductKey: NSString; cdecl;
    function ProductVendor: NSString; cdecl;
    function ProductName: NSString; cdecl;
    function ProductPackage: NSString; cdecl;

    property ProductKey_: NSString read ProductKey write setProductKey;
    property ProductVendor_: NSString read ProductVendor write setProductVendor;
    property ProductName_: NSString read ProductName write setProductName;
    property ProductPackage_: NSString read ProductPackage write setProductPackage;
end;

我不知道这是否是正确的解决方案,但它有效。

如果有人对使用此解决方案时可能出现的问题有任何意见,请发表。

4

1 回答 1

1

在 Delphi 中它应该是这样的。属性映射到具有属性名称的函数。setter 映射到以属性类型作为参数的过程集。

ProductInitParams = interface(NSObject)['{149A7187-D3E1-4713-B2D1-6EA1801F4A7D}']
  function ProductKey : NSString; cdecl;
  procedure setProductKey(value : NSString); cdecl;
  function ProductVendor : NSString; cdecl;
  procedure setProductVendor(value : NSString); cdecl;
end;

也许这个链接也可以帮助你XE4(Firemonkey + iOS 静态库),来自 Objective C 类的 Pascal 转换?

于 2013-05-13T20:23:50.957 回答