2Pascal-新时代的Pascal
标题:
RAD10 新建 dll so 动态库 win 安卓 fmx 动态调用 教程 V1.0.2015.1031
[打印本页]
作者:
wang_80919
时间:
2018-3-11 15:19
标题:
RAD10 新建 dll so 动态库 win 安卓 fmx 动态调用 教程 V1.0.2015.1031
重点是文章是 2015年 d10 刚刚发布之后做的,现在应该已经不适用了。
也许,你会更成功,也许更失败。
Please note: This is Chinese document, if you don't understand, please go to Confucius College(孔子学院) to study.
(****************************************************)
(* *)
(* 编写:爱吃猪头肉 & Flying Wang *)
(* 上面的版权声明请不要移除。 *)
(* 2015-10-30 *)
(* *)
(* 禁止发布到城通网盘。 *)
(* *)
(****************************************************)
RAD10 新建 dll so 动态库 win 安卓 fmx 调用 教程
第一步
新建 4 个目录
DLL 目录放 DLL 工程
SO 目录放 so 工程
Dll So Common 目录放 动态库的具体 代码。
Fmx Test 目录放 FMX 跨平台测试工程。
第二步
新建一个 DLL工程 名叫 TestDll 保存工程 到 DLL 目录
新建一个 安卓服务工程 也叫 TestDll 保存工程 到 SO 目录(有高手说,可以新建一个 DPK 也就是 Package 工程,平台选 安卓,效果一样)。
将 安卓 TestDll 自带的 unit1 移除 并删除。
将安卓 TestDll 的 dpr 的代码修改 为
program TestDll;
uses
System.SysUtils,
System.Classes
;
{$R *.res}
begin
end.
简单的说,就是 安卓服务 的代码,都不要了,换 DLL 的代码。
第三步
新建一个空 Unit1 。
保存到Dll So Common 目录,在两个 TestDll 中 都将 该 unit 加入到工程中。
第四步
在 Unit1 中 写 DLL 函数接口。具体代码 请查看 后面给出的 DEMO。
然后 DLL 和 SO 版本的 TestDll 工程都编译出来。
建议 Release 和 Debug 各编译一份。
第五步
新建一个 FMX 跨平台 工程,例如保存到 Fmx Test 目录。
在你需要 使用 DLL 的地方。
写下 类似如下的 DLL 引用 代码。
[mw_shl_code=delphi,true]const
LibName = {$IFDEF MSWINDOWS} 'TestDll.dll'; {$ELSE}
{$IFDEF ANDROID} 'libTestDll.so'; {$ELSE} 'libTestDll.dylib'; {$ENDIF ANDROID}
{$ENDIF MSWINDOWS}
Fun_TestAdd_Name = 'TestAdd';
type
Fun_TestAdd = function(a,b: Integer): Integer;
{$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}[/mw_shl_code]
可以参考 后面 给出的 DEMO。
第六步
在 工程的 部署界面。
给 安卓的 Debug 和 Release 都加入 'libTestDll.so ,并且设置 部署路径为:library\lib\armeabi-v7a\
[attach]1019[/attach]
[attach]1020[/attach] 两个分别都加。
[attach]1021[/attach]
[attach]1022[/attach]
注意输出的路径都是 library\lib\armeabi-v7a\
注意:上图的so 文件名错误,应该没有 2 。
第七步
可以在 WIN 和 安卓 平台 运行了。
附源码
使用 源代码,之前,请检查 部署(Deployment 界面)的路径是否正确。
一般都不正确。请点。
[attach]1023[/attach]
最后一个 按钮,可能图标会不一样。
[attach]1024[/attach]
按照这个选。
然后在
[attach]1025[/attach]
和
[attach]1026[/attach]
里面去掉这个 3 个。
[attach]1027[/attach]
然后 按照前面说的 将 libTestDll.so 加入到部署中。
最后附上所有的代码。
附2
目前发现 TEncoding.ANSI UTF8 在 安卓下 无法工作。
作者:
sxbug
时间:
2018-3-11 16:01
学习中,认真学习中,特别认真学习中
作者:
bjabc
时间:
2018-3-12 02:56
感谢老猫,学习中
作者:
ycs
时间:
2018-4-4 11:31
认真学习中,特别认真学习中
作者:
kgmnsh
时间:
2018-4-4 21:20
感谢分享。。。
作者:
327902
时间:
2018-7-31 09:49
什么东西啊
作者:
dolang
时间:
2018-8-25 09:22
学习一下。
作者:
老球球
时间:
2018-11-9 00:12
你这么优秀!!!!!!!!!!!!!!!!!!
作者:
truelsm
时间:
2018-11-14 07:33
过来向高手学习。
作者:
pilgrim851
时间:
2018-12-2 06:22
新手努力学习中,感谢
作者:
aarad888
时间:
2019-1-31 16:03
好资料好资料
作者:
hnxiong
时间:
2019-3-11 01:20
新手努力学习中,感谢
作者:
tangnyzl
时间:
2019-4-12 01:06
水平真高呀,
作者:
benbenzai
时间:
2019-6-14 13:30
感谢分享!
作者:
bbzzjl
时间:
2019-11-11 03:24
瞧一瞧看一看
作者:
jim560115
时间:
2019-12-21 07:43
感谢,学习中
作者:
tangnyzl
时间:
2019-12-30 00:50
习中,认真学习中,特别认真学习中
作者:
先来一铜大铲
时间:
2020-3-3 08:39
没有用,老猫肯定是不会放上来的,偷偷的学
作者:
pieomy
时间:
2020-3-21 16:22
thanks you for explain
作者:
sail2000
时间:
2020-4-9 07:50
不知道RIO还可不可以
欢迎光临 2Pascal-新时代的Pascal (http://2pascal.com/)
Powered by Discuz! X3