Windows 64

Вопросы по работе с электронными ключами SenseLock из операционных систем с использованием различных компиляторов

Windows 64

Сообщение mig_morozov » Пн, 04 мар 2013 20:23

Программа ужа давно написана и нормально работает. Проблема появилась при запуске под windows 7 64.

S4ChangeDir часто выдает 2

S4Enum часто не видит ключей (size = 0)

Часто - приблизительно каждый второй запуск. Иногда все нормально.

на этой же машине под windows 7 32 проблем нет.

Стоят последние драйвера. Программа написана на Delphi 6.
mig_morozov
 
Сообщения: 27
Зарегистрирован: Пт, 07 сен 2007 12:54

Re: Windows 64

Сообщение Alexey » Вс, 28 апр 2013 14:00

mig_morozov писал(а):Программа ужа давно написана и нормально работает. Проблема появилась при запуске под windows 7 64.

S4ChangeDir часто выдает 2

S4Enum часто не видит ключей (size = 0)

Часто - приблизительно каждый второй запуск. Иногда все нормально.

на этой же машине под windows 7 32 проблем нет.

Стоят последние драйвера. Программа написана на Delphi 6.


Никаких проблем с работой под Win x64 не наблюдаем. Статистика — несколько тысяч клиентских компьютеров.
Возможно, следует еще раз проанализировать ваш код на предмет возможных ошибок.
PS: Delphi 6 устарел очень давно. На дворе уже RAD XE4.
Alexey
 
Сообщения: 69
Зарегистрирован: Сб, 21 мар 2009 14:43

Re: Windows 64

Сообщение shytsko_м » Вт, 01 июл 2014 14:38

Тоже имею проблему с Win7 64. Программа написана на C# в VS2008. Интерфейс с ключем через dll. На данный момент версия dll 3.0.1.0, взято из SDK.
На WinXP 32 и Win7 32 c 32-битной dll все работает. На Win7 64 с 64-битной dll при вызове S4Enum возвращаются не верные данные. Например ID ключа {0x49, 0x54, 0x56, 0x49, 0x50, 0x00, 0x00, 0x00}, а в возвращаемой структуре {0x00, 0x00, 0x00, 0x00, 0x49, 0x54, 0x56, 0x49}, т. е. сдвинуто.

Фрагмент кода. Определение SENSE4_CONTEXT и весь DllImport взят из примера SDK.
Код: Выделить всё

            private SENSE4_CONTEXT si;
            byte[] ID = new byte[8] {0x49, 0x54, 0x56, 0x49, 0x50, 0x00, 0x00, 0x00};
            //enumerate devices         
            uint size = 0;
            uint ret = S4Enum(null, ref size);
            if(0x11 != ret) throw new SenseLockException("Ключ отсутствует!");


            SENSE4_CONTEXT[] si_enum = new SENSE4_CONTEXT[size / Marshal.SizeOf(typeof(SENSE4_CONTEXT))];
            ret = S4Enum(si_enum, ref size);
            if(0x00 != ret) throw new SenseLockException("Ключ отсутствует!");

            si.bID=null;


            foreach (SENSE4_CONTEXT _si in si_enum)
            {
                if(_si.bID.SequenceEqual(ID))
                    si=_si;
            }

            if(si.bID==null)
                throw new SenseLockException("Ключ отсутствует!");

..................................................................................................


Помогите, пожалуйста. решить проблему
shytsko_м
 
Сообщения: 2
Зарегистрирован: Вт, 01 июл 2014 13:50

Re: Windows 64

Сообщение hijaq » Пт, 04 июл 2014 16:03

Эта ошибка скорее всего из-за того что S4HANDLE из структуры SENSE4_CONTEXT используется как 32-битное значение в 64-битной системе, а должно быть как 64-битное.
hijaq
Site Admin
 
Сообщения: 213
Зарегистрирован: Пт, 06 апр 2007 14:50

Re: Windows 64

Сообщение shytsko_м » Вт, 08 июл 2014 15:31

Спасибо, так и есть. Заменил тип int на IntPtr для члена hLock в структуре. Теперь все работает
shytsko_м
 
Сообщения: 2
Зарегистрирован: Вт, 01 июл 2014 13:50

Re: Windows 64

Сообщение Foolfire » Вт, 13 янв 2015 13:52

При попытке загрузки библиотеки для Java
Код: Выделить всё
try { System.loadLibrary("JavaSense4"); }
catch (UnsatisfiedLinkError ex) { System.out.println(ex.getMessage()); }

в 64-разрядной версии Windows 8.1 отображается сообщение "Can't load IA 32-bit .dll on a AMD 64-bit platform".

Выложите, пожалуйста, версию Java-библиотеки для 64-разрядных версий Windows. Спасибо.
Foolfire
 
Сообщения: 1
Зарегистрирован: Вт, 13 янв 2015 13:42

Re: Windows 64

Сообщение Beetle » Чт, 10 дек 2015 08:01

Foolfire писал(а):При попытке загрузки библиотеки для Java
Код: Выделить всё
try { System.loadLibrary("JavaSense4"); }
catch (UnsatisfiedLinkError ex) { System.out.println(ex.getMessage()); }


Foolfire, а подскажите, пожалуйста, как Вы объявляли прототипы native функций? А именно, что делать с SENSE4_CONTEXT в си коде? как с ней работать в java?
Beetle
 
Сообщения: 1
Зарегистрирован: Чт, 10 дек 2015 07:50


Вернуться в Использование SenseLock

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron