Тоже имею проблему с 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("Ключ отсутствует!");
..................................................................................................
Помогите, пожалуйста. решить проблему