首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >汇编的dll中的PopString和PushString方法

汇编的dll中的PopString和PushString方法
EN

Stack Overflow用户
提问于 2022-01-20 16:58:21
回答 2查看 66关注 0票数 0

在dll的执行过程中,安装程序在这些方法上崩溃,这些方法是从文件nsis.pas中提取的。

代码语言:javascript
运行
复制
    function PopString(): string;
var
  th: pstack_t;
begin
  if integer(g_stacktop^) <> 0 then begin
    th := g_stacktop^;
    Result := PChar(@th.text);
    g_stacktop^ := th.next;
    GlobalFree(HGLOBAL(th));
  end;
end;
procedure PushString(const str: string='');
var
  th: pstack_t;
begin
  if integer(g_stacktop) <> 0 then begin
    th := pstack_t(GlobalAlloc(GPTR, SizeOf(stack_t) + g_stringsize));
    lstrcpyn(@th.text, PChar(str), g_stringsize);
    th.next := g_stacktop^;
    g_stacktop^ := th;
  end;
end;
EN

回答 2

Stack Overflow用户

发布于 2022-01-21 00:39:27

看起来,在编译为Unicode时,nsis.pas可能并不与每个Delphi兼容。您没有指定您的版本,所以我不知道您的string类型是AnsiStringWideString还是UnicodeString

我已经不太了解Pascal/Delphi了,但我能够在FreePascal 用这个版本中使用它。我将尝试在下一个版本中修复它。

确保在UNICODE插件中使用Unicode时定义了Unicode。

票数 0
EN

Stack Overflow用户

发布于 2022-01-21 15:00:27

这个问题很容易解决,有必要从nsis.pas调用Init(),然后一切正常工作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70790326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档