2012-04-13 98 views
1

我有兴趣使用Firemonkey来制作iOS应用程序。我想在这个应用程序中使用几个本地C库。我知道iOS不允许使用动态链接库,但是在这个Firemonkey iOS应用程序中是否有使用静态库的方法?在Delphi Firemonkey中使用本机C静态库iOS开发

+0

什么是FPC文档必须在这件事上说? – 2012-04-13 07:26:00

+0

似乎Delphi一般不能创建或使用静态库。 – user1027169 2012-04-13 19:40:16

回答

2

是的,您可以使用C静态库与使用xcode的Firemonkey iOS应用程序链接。 我在RADstudio X2之外使用了Xcode。用RADStudio生成xcode项目。在Mac我openned Xcode项目,并补充说:

function C_func(double :x):double; cdecl; external; 

{$linklib my_c_lib.a} 

我创建在Xcode(名为my_c_lib)静态库项目,包含一个C文件:

double C_func(double x) 
{ 
    return x+2.5; 
} 

我想,以同样的方式你可以使用已编译的静态库。

+0

有一篇关于类似问题的文章[这里](http://stackoverflow.com/questions/10287149/how-to-call-nsbeep-from-delphi) – Yazou 2012-05-16 10:48:05

1

这是一款iOS应用,我提出:由XE2产生 Unit1.pas:

unit Unit1; 

interface 

uses 
    SysUtils, Types, UITypes, Classes, Variants, FMX_Types, FMX_Controls, FMX_Forms, 
    FMX_Dialogs, FMXTee_Engine, FMXTee_Series, FMXTee_Procs, FMXTee_Chart, 
    FMX_ExtCtrls; 

type 
    TForm1 = class(TForm) 
    CornerButton1: TCornerButton; 
    Chart1: TChart; 
    Series1: TLineSeries; 
    Label1: TLabel; 

    procedure CornerButton1Click(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    x : double; // I added this in Xcode Editor 
    end; 

// I added this declaration 
function tst_function(x:double):double;cdecl;external; 
var 
    Form1: TForm1; 


implementation 

{$R *.lfm} 
{$link tst1.o} // I added this 

procedure TForm1.CornerButton1Click(Sender: TObject); 
var  i: integer; x : double; 
begin 
for i := 1 to 500 do 
begin 
x:=tst_function(i*3.14/250.0); 
Series2.Add(x); 

end 

end; 

end. 

和C文件tst1.c是:

#include <stdio.h> 
#include <math.h> 

double tst_function(double x) 
{ 
    return sin(x)+0.25; 
}