GetWindowsDirectory带出指针值

 

发现自己这么多年是个假程序员,最基础的东西不清楚居然混了这么多年。

近期做了一个小功能,需要从动态库中返回字符串,一开始的实现是这样的:

procedure fun1(p1: pchar; var p2: pchar); stdcall;
var
  str: string;
begin
  str:= p1;
  p2:= PChar(str+str);
end;
这样声明的话,后边的Pchar的内容(指针/地址)是可修改的(PChar的引用传递)。

但是,我想把var给去掉,弄了半天也弄不成,怎么实现呢?

百度了一下:

procedure Test(p: PChar); stdcall;
const
  Title = 'Title ';
var
  str: string;
begin
  str := p;
  StrCopy(p, Title);
  StrCat(p, PChar(str));
end;
这种实现是PChar的值传递,要得到dll中的字符串,需要用到StrCopy方法,

这么多年居然没用过这个方法,很汗颜...

以为自己已经知道了,其实还差得多。

相关操作


{ Getting the Windows Directory }

function GetWinDir: string;
var
dir: array [0..MAX_PATH] of Char;
begin
GetWindowsDirectory(dir, MAX_PATH);
Result := StrPas(dir);
end;

// or:

function WindowsDirectory: string;
var
WinDir: PChar;
begin
WinDir := StrAlloc(MAX_PATH);
GetWindowsDirectory(WinDir, MAX_PATH);
Result := string(WinDir);
if Result[Length(Result)] <> '\' then
Result := Result + '\';
StrDispose(WinDir);
end;

// or:

function GetWindowsDirectory(var S: String): Boolean;
var
Len: Integer;
begin
Len := Windows.GetWindowsDirectory(nil, 0);
if Len > 0 then
begin
SetLength(S, Len);
Len := Windows.GetWindowsDirectory(PChar(S), Len);
SetLength(S, Len);
Result := Len > 0;
end else
Result := False;
end;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值