Delphi的XE7 firemonkey机器人动态加载共享对象/库 - 模板(delphi XE7

2019-10-21 07:21发布

是否有一个模板来创建可以由另一个德尔福APE文件加载的.so文件 - 我试图启动一个空射猴项目和改变程序库,并建立它,但.so文件,它产生不会加载另一个德尔福项目中dlopen的。 我已阅读,在其他开发环境有一个islibrary设置。 我想更重要的一点是存在的。所以用火猴建库的例子 - 我发现不火猴梗概链接,但它仅使用JNI不androidapi.jni - 感谢

Answer 1:

以下代码可以是有用的。

//-- Code for libMylib.so (MyLib.dproj) --- 

    library MyLib; 
//    uses  SysUtils;


    function GetSum(a, b: integer ) : integer; cdecl; 
    begin 
      Result := a + b; 
    end;

    exports

    GetSum        name 'GetSum'; 

    begin 
    end. 

    //-- Code for using libMylib.so (TestMyLib.dproj) --- 

    var 
    DocDir, LibFN: string; 
    GetSum: function(a, b: integer ) : integer; cdecl; 
    hLib: HMODULE; 

    begin 
      DocDir := IncludeTrailingPathDelimiter(System.IOUtils.TPath.GetLibrary`enter code here`Path);
      LibFN:=DocDir + 'libMyLib.so';
      hLib := LoadLibrary(LibFN); //ERROR (Segmentation fault (11)) 
      if hLib<>0 then 
      begin 
        GetSum := GetProcAddress(hLib, 'GetSum');//It works
        ShowMessage(IntToStr(GetSum(3, 8)));//It works 
      end; 
    end; 

PS:您必须添加编译libMyLib.so文件TestMyLib.dproj的部署。

P.S2:在执行“调用LoadLibrary”它给出了一个错误,但它的作品。

我无法找到一个解决方案。 也许这与MyLib.dproj的编译器/连接器选项有关。 因为当我测试其使用C编译另一“所以”文件++,而调用LoadLibrary不会出现问题。



Answer 2:

如果你开始一个空白Firemonkey项目和修改单元 ,你会得到这个编译器错误:

[DCC错误] myfunnylib.pas(1):E2029 '单元' 预期,但 '图书馆' 发现


试图现有库项目添加到项目组会说项目从构建的其余部分分离和分配唯一的创建目标和平台,以它。 这将离开你的选项来编译Windows和OS X.

到目前为止,我听到的唯一方法是预编译您的图书馆与其他编译器。 FPC已经提到其他地方。 我还没有试过,但但其列表中的下。

http://wiki.freepascal.org/Android

不要被这样的事实,每一个Android应用程序实际上是在与扩展的.so( 共享对象 )的共享对象感到困惑。 然而,这是不一样的事,作为一个共享库。 由于库导出的功能,而应用程序则没有。 一个编译器,那是相当的差异,虽然你不会看到,文件扩展名,看(但其前缀改为LIB)。

如果你限制XE和Firemonkey你的问题,我在这里只建议是寻找到Android服务。 绑定本地服务可能会提供你会从库预计类似的功能:

http://docwiki.embarcadero.com/RADStudio/Seattle/en/Android_Service

同样重要的是要注意,Android的N值将不会允许动态链接了这么多,你会发现其他地方的解决方案将无法正常工作的方法。

在下面的答案SUAT DMK的代码示例,虽然上投,是一种误导。
它不能在XE 10.1或任何其前任编译为Android或iOS。

更新:
有从Embarcadero公司的工作人员对这个问题一个明确的说法。
我花了一点时间和耐心的解释问题,但答复的内容是非常明显的:

[..]想要的Delphi具有共享库(。所以)的项目类型,
在这种情况下,那么他是对的,德尔福没有它现在。 [..]

据证实

因此,不可能有这样的模板。 还回答了这个问题。



文章来源: delphi XE7 firemonkey android shared object / library to be dynamically loaded - template