Использование 64-битных библиотек SPSS в C # - PullRequest
4 голосов
/ 08 апреля 2011

Я пытаюсь создать файл .sav программным способом без необходимости использовать автоматизацию SPSS (библиотека SPSS.BackendAPI) для освобождения большего количества лицензий SPSS. Я нашел эту библиотеку в CodePlex, которая использует 32-битный модуль ввода-вывода без лицензии, что хорошо.

Проблема в том, что мне нужно собрать приложение под x64, чтобы получить доступ к дополнительной адресуемой памяти в моем собственном приложении. Поэтому мне нужно использовать и 64-битные библиотеки. Кому-нибудь повезло с использованием 64-битных библиотек в управляемом коде?

Ответы [ 2 ]

6 голосов
/ 08 апреля 2011

Вы можете использовать эту библиотеку из CodePlex, но вам придется немного ее изменить, чтобы она работала с spssio64.dll, который входит в состав модуля ввода / вывода.В файле SpssThinWrapper.cs вам нужно изменить импортируемую DLL.Вам также придется изменить некоторые точки входа.Чтобы получить имена точек входа в 64-битной DLL, вам нужно запустить dumpbin /exports spssio64.dll.Если вы сделаете это, вы увидите, что 64-битные и 32-битные точки входа в основном совпадают, за исключением того, что некоторые из 32-битных имеют знак @ и число после них, тогда как ни одна из 64-битные точки входа делают.Измените все это вместе с DLL в атрибуте DllImport.Например:

[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 из папки win64 модуля ввода / вывода в папку ресурсов из библиотеки SPSS .NET из CodePlex.Это перезапишет существующие 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 * и проверяет, что они находятся вправильный порядок и все.

3 голосов
/ 11 апреля 2011

Почему бы вам не использовать библиотеку SPSS Statistics i / o dll, доступную на сайте сообщества SPSS (www.ibm.com/developerworks/spssdevcentral)?Он бесплатный и поставляется в 32- и 64-битных версиях для всех поддерживаемых платформ SPSS.Для него не требуется лицензия SPSS.

...