在dll的执行过程中,安装程序在这些方法上崩溃,这些方法是从文件nsis.pas中提取的。
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;
发布于 2022-01-21 00:39:27
看起来,在编译为Unicode时,nsis.pas可能并不与每个Delphi兼容。您没有指定您的版本,所以我不知道您的string
类型是AnsiString
、WideString
还是UnicodeString
。
我已经不太了解Pascal/Delphi了,但我能够在FreePascal 用这个版本中使用它。我将尝试在下一个版本中修复它。
确保在UNICODE插件中使用Unicode时定义了Unicode。
发布于 2022-01-21 15:00:27
这个问题很容易解决,有必要从nsis.pas调用Init(),然后一切正常工作
https://stackoverflow.com/questions/70790326
复制相似问题