DelphiXE10.2.3 for Linux开发(三) ——Linux下获取自身运行程序的绝对路径

Delphi程序在Linux下获取自身程序的路径信息,不像Winsows下有现成函数调用,需要绕一下。

uses System.Classes,
{$IFDEF MSWINDOWS}
  Winapi.Windows,
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
  Posix.Dlfcn, Posix.Fcntl, Posix.SysStat, Posix.SysTime, Posix.SysTypes,
  Posix.Locale, Posix.unistd,
{$ENDIF POSIX}

  System.SysUtils;

// 获取自身绝对路径
function GetDLLModuleFilePath(): string;
var
  ModuleName: string;
  Info: dl_info;
  path: array [0 .. 1023] of byte;
  cnt, i: integer;
begin
{$IFDEF MSWINDOWS}
  setlength(ModuleName, 255);
  GetModuleFilename(HInstance, pchar(ModuleName), length(ModuleName));
  result := pchar(ModuleName);
{$ENDIF MSWINDOWS}

{$IFDEF POSIX}

//使用readlink函数来获取

  cnt := readlink('/proc/self/exe', @path[0], 1024);

  if (cnt < 0) or (cnt >= 1024) then
    exit('');
  for i := 0 to cnt - 1 do

    result := result + char(path[i]);

//dladdr函数只能获取到当前文件的相对路径

  // if (dladdr(IntPtr(@GetDLLModuleFilePath), Info) <> 0) and (Info.dli_fname <> nil) then
  // ModuleName := string(Info.dli_fname);
  // result := ModuleName;
{$ENDIF POSIX}
end;
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值