64位-在c#中使用64位SPSS库

本文关键字:64位 SPSS | 更新日期: 2023-09-27 17:49:44

我试图以编程方式创建一个.sav文件,而不必使用SPSS自动化(SPSS。BackendAPI库),以便释放更多的SPSS许可证。我在CodePlex上找到了这个库,它使用32位I/O模块而不需要许可证,这很好。

问题是我需要将应用程序构建为x64,以便访问我自己的应用程序中的额外可寻址内存。因此,我也需要使用64位库。有人有幸在托管代码中使用64位库吗?

64位-在c#中使用64位SPSS库

您可以使用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。将I/O模块的win64文件夹中的spssio64.dll、icudt32.dll、icuuc32.dll和icuuc32.dll拷贝到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统计i/o dll呢?它是免费的,有32位和64位版本,适用于所有支持的SPSS平台。它不需要SPSS许可证