【发布时间】:2020-07-17 17:20:03
【问题描述】:
我正在向正在通过 NSIS 脚本编写安装程序的用户提供 c++ .dll。使用 System.dll,用户可以这样调用我的 .dll:
System::Call 'my.dll::GetJson(v) t .r0'
DetailPrint $0
GetJson() 的返回值存储在 $0 中。这一切都正常工作,尽管 GetJson() 可能会返回一个长度大于 8192 的 json blob,在这种情况下,存储在 $0 中的值会被截断。
我试图通过使用 scons 自己构建 NSIS 来增加 NSIS_MAX_STRLEN,如下所述:https://nsis.sourceforge.io/Special_Builds
scons NSIS_MAX_STRLEN=16384 PREFIX=C:\somewhere install-compiler install-stubs
但是,执行此操作后,NSIS 编译的 .exe 在运行时崩溃。似乎 8192 可能是某种内存限制。
我有什么办法解决这个问题吗?例如,是否可以调用
System::Call 'mydll::GetJson(v) t .r0'
但是不是将返回值存储在 $0 中,而是将其拆分为块吗?也许可以先将 GetJson() 的内容写入文件,然后 NSIS 可以读取并拆分它?
感谢任何帮助。谢谢。
【问题讨论】:
-
如果拆分字符串是可以接受的,那是否意味着您不需要在 NSIS 中解析/修改字符串?
-
@Anders Oof 好点子。用户将需要解析该 JSON,因此拆分可能对我没有帮助。