我正在使用NSIS编写一个安装程序,需要解析一个JSON块。
为了达到这个目的,我希望能够调用一个解析JSON的.Net dll,然后在我的NSIS脚本中,我可以调用该类的属性来检索我需要的数据。
但是,似乎NSIS CLR.dll存在一个问题,即调用之间不保持类的状态。
我的测试.Net类如下:
namespace NSISTestDll
{
public class TestClass
{
private bool _configured;
public void Configure()
{
_configured = true;
}
public string Name
{
get
{
if (_configured)
{
return "John Doe";
}
return "Unconfigured";
}
}
}
}
我的NSIS脚本部分称之为:
File "NSISTestDll.dll"
CLR::Call /NOUNLOAD "NSISTestDll.dll" "NSISTestDll.TestClass" "Configure" 0
CLR::Call /NOUNLOAD "NSISTestDll.dll" "NSISTestDll.TestClass" get_Name 0
pop $0
MessageBox MB_OK $0
MessageBox显示“Unconfigured”而不是预期的“John Doe”。
在CLR.dll上阅读论坛,插件的创建者确实提到这是一个问题。
有没有人知道这方面的解决方法?
我想做的一件事是在C ++中编写一个包装器并使用System.dll,这样我就可以将我需要的值直接传递回NSIS脚本变量。
另一种选择是为我需要检索的每个属性解析JSON,JSON足够小,不会对性能造成太大影响。
答案 0 :(得分:2)
在像CLR::Call /NOUNLOAD ...
/ NOUNLOAD这样的调用中只适用于CLR dll(插件)如果需要保持NSISTestDll加载,CLR插件本身必须发明/支持它自己的参数