gpt4 book ai didi

delphi - XE4(Firemonkey + iOS静态库),从Objective C类转换Pascal?

转载 作者:行者123 更新时间:2023-12-03 15:00:32 25 4
gpt4 key购买 nike

如何转换? ( objective-c 类-> Delphi XE4)

以及如何在 Delphi XE 的静态库中使用 Objective-C 类?

以下是我的第一次尝试。但它会出错。

Objective C 源代码

// objective C : test.h ----------------------------------------
@interface objc_test : NSObject {
BOOL busy;
}
- (int) test :(int) value;
@end

// objective C : test.m ----------------------------------------
@implementation objc_test
- (int) test :(int) value {
busy = true;
return( value + 1);
}
@end

我的转换代码是错误的。如何解决这个问题?

德尔福源码

// Delphi XE4 / iOS  -------------------------------------------
{$L test.a} // ObjC Static Library

type
objc_test = interface (NSObject)
function test(value : integer) : integer; cdecl;
end;

Tobjc_test = class(TOCLocal)
Public
function GetObjectiveCClass : PTypeInfo; override;
function test(value : integer): integer; cdecl;
end;

implmentation

function Tobjc_test.GetObjectiveCClass : PTypeInfo;
begin
Result := TypeInfo(objc_test);
end;

function Tobjc_test.test(value : integer): integer;
begin
// ????????
//
end;

谢谢

西蒙·崔

最佳答案

当你想导入 Objective C 类时,你必须执行以下操作:

type
//here you define the class with it's non static Methods
objc_test = interface (NSObject)
[InterfaceGUID]
function test(value : integer) : integer; cdecl;
end;

type
//here you define static class Methods
objc_testClass = interface(NSObjectClass)
[InterfaceGUID]
end;

type
//the TOCGenericImport maps objC Classes to Delphi Interfaces when you call Create of TObjc_TestClass
TObjc_TestClass = class(TOCGenericImport<objc_testClass, objc_Test>) end;

您还需要一个 dlopen('test.a', RTLD_LAZY) (dlopen 在 Posix.Dlfcn 中定义)

然后您可以使用如下代码:

procedure Test;
var
testClass: objc_test;
begin
testClass := TObjc_TestClass.Create;
testClass.test(3);

end;

关于delphi - XE4(Firemonkey + iOS静态库),从Objective C类转换Pascal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16515218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com