專案需求因此測試了動態載入.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的方式將靜態引用寫完整之後即可使用

 


 

 

心得是

動態載入開視窗會發生錯誤

 

靜態不會

 

所以先用靜態吧 哪天動態沒問題了在說再看在研究

自己最初的問題只好切專案檔來分了

arrow
arrow
    全站熱搜

    kuraki5336 發表在 痞客邦 留言(2) 人氣()