2013-05-13 57 views
0

我正在使用Delphi XE3開發使用第三方動態庫(.dylib)進行工作的MAC OS X應用程序。如何將Objective C @property轉換爲Delphi XE3

目標庫有目標C頭文件,我試圖將其轉換爲Delphi。幾乎一切都很好,但有一個接口只包含@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; 

,但我不知道該怎麼讀\寫寫字。

有誰知道如何做到這一點?

P.S. 我看着馬卡皮。*單位 - 沒有關於編組屬性。

UPDATE

閱讀蘋果documentation約@property後,我想出了這個解決方案。

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; 

我不知道它是否正確的解決方案,但它的工作原理。

如果有人對使用此解決方案時可能出現的問題有任何意見,請發帖。

回答

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 Static Library) , Pascal conversion from Objective C Class?