我正在尝试以编程方式创建.sav
文件,而不必使用 SPSS 自动化(SPSS.BackendAPI 库)来释放更多 SPSS 许可证。我在 CodePlex 找到了这个库,它使用 32 位 I/O 模块而无需许可证,这很好。
问题是我需要将应用程序构建为 x64 才能访问我自己的应用程序中的额外可寻址内存。因此,我也需要使用 64 位库。有没有人在托管代码中使用 64 位库运气好?
您可以使用 CodePlex 中的该库,但您必须对其进行一些修改才能使用 I/O 模块中包含的 spssio64.dll。在该SpssThinWrapper.cs
文件中,您需要更改正在导入的 DLL。您还必须更改一些入口点。要获取 64 位 DLL 中入口点的名称,您需要运行dumpbin /exports spssio64.dll
. 如果您这样做,您会看到 64 位和 32 位入口点基本相同,只是一些 32 位入口点后面有一个 @ 符号和一个数字,而 64- 位入口点都没有。位入口点做。请更改所有这些以及 DllImport 属性中的 DLL。例如:
[DllImport("spssio32.dll", EntryPoint="spssCloseAppend@4", CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
public static extern ReturnCode spssCloseAppend(int handle);
变成
[DllImport("spssio64.dll", EntryPoint = "spssCloseAppend", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern ReturnCode spssCloseAppend(int handle);
等等。
完成此操作后,您需要确保使用正确的 DLL。将 spssio64.dll、icudt32.dll、icuin32.dll 和 icuuc32.dll 从 I/O 模块的 win64 文件夹复制到 CodePlex 中 SPSS .NET 库的 Resources 文件夹中。这将覆盖现有的 32 位 dll,因此如果您需要 32 位和 64 位,则必须做一些不同的事情,但听起来您只需要 64 位,所以这应该可以。
.sav
作为一个使用这个库创建一个多么容易的例子:
using (SpssDataDocument spssDoc = SpssDataDocument.Create("test.sav")) {
SpssVariable v = new SpssNumericVariable();
v.Name = "gender";
v.Label = "What is your gender?";
v.ValueLabels.Add(1, "Male");
v.ValueLabels.Add(2, "Female");
doc.Variables.Add(v);
doc.CommitDictionary();
SpssCase c = doc.Cases.New();
c["gender"] = 1;
c.Commit();
}
该库会为您处理所有的 spss* 调用,并确保它们的顺序正确且一切正常。
为什么不直接使用 SPSS 社区站点 (www.ibm.com/developerworks/spssdevcentral) 提供的 SPSS Statistics i/o dll?它是免费的,并提供适用于所有受支持的 SPSS 平台的 32 位和 64 位版本。它不需要 SPSS 许可证。