專案需求因此測試了動態載入.so 靜態載入.a
動態載入
在Delphi 專案裡 .so 專案檔 Multi-Device Application 的專案,輸出 Android
在Build的時候則會產生.so檔
再到 IDE ToolBar > Projcet > Deployment 將.so 加入即可
加入後必須調整兩個選項,方可讓下段程式碼 輕易讀取到 .so 的檔案
寫入的 .so 檔 會是呈現File的型態,將Remote Path 改成此路徑
開啟 .so
var
LLibPath: String;
begin
LLibPath := TPath.Combine(TPath.GetDocumentsPath, 'libPackage2.so');
FModuleHandle := LoadLibrary(PWideChar(LLibPath));
if FModuleHandle = 0 then
ShowMessage('找不到SO檔唷')
開啟 .so 檔 裡 Export 的 mathon
type
TSayHelloProc = procedure;
var
p: TSayHelloProc;
begin
p := GetProcAddress(FPackege, 'ShowFrom');
if @p <> nil then
begin
p;
end;
#這段可能有點錯,原Source被我砍掉了,需要的人可以上網稍微爬文一下 #
靜態載入
輸出 Android 在Build的時候則會產生.a檔
開個空的.pas
unit Unit1;
{$link libPackage2.a}
{$link libPackage3.a}
interface
uses Classes;
const
lib2='libPackage2.a';
lib3='libPackage3.a';
procedure SayHello(msg: string); cdecl;
procedure ShowFrom; cdecl ;
function ShowFrame:TComponentClass; cdecl ;
implementation
procedure SayHello; external lib2;
procedure ShowFrom; external lib2;
function ShowFrame; external lib3;
將專案的.a檔路徑參考設定在你的 Search path
如同寫DLL的方式將靜態引用寫完整之後即可使用
心得是
動態載入開視窗會發生錯誤
靜態不會
所以先用靜態吧 哪天動態沒問題了在說再看在研究
自己最初的問題只好切專案檔來分了