Странная проблема с API C#

Давно сделал защиту на С++ - всё работает без нареканий.
Тут случилась новая программа - вся полностью на C#
Взял пример из документации - и попал в тупик...

При создании GrdHandle
    GrdHandle = GrdApi.GrdCreateHandle(GrdCHM.SingleThread);    //.MultiThread);
случается странная штука:

Необработанное исключение типа "System.InvalidCastException" произошло в GuardantDotNetApi.dll
Дополнительные сведения: Заданное приведение является недопустимым.

Что с SingleThread, что с MultiThread - без разницы.

Re: Странная проблема с API C#

Здравтствуйте.

Ответ был направлен e-mail.
Удалось ли собрать пример?

Re: Странная проблема с API C#

Да, Антон, всё именно так - взял изначально какой-то довольно старый сэмпл.
С новым всё сильно по другому. Пока застрял на DongleNotFind - времени нет толком заняться...

Re: Странная проблема с API C#

Виктор Блинов пишет:

Пока застрял на DongleNotFind - времени нет толком заняться...

Это на вызове какой функции?
Свои коды указали?
Демо-маска прошита в ключ?

(2019-04-04 10:25:26 отредактировано Виктор Блинов)

Re: Странная проблема с API C#

GrdApi.GrdFind говорит, что всё хорошо.

Initialize this copy of GrdAPI : No errors
Create Guardant protected container : No errors
Storing dongle codes in Guardant protected container : No errors
Setting dongle search conditions : No errors
Searching for all specified local dongles and print dongles info about it's
------------------------------------------------------------------------------
  Public  HVer Net  Type DongleID Prog Ver    SN  Mask    GP NetRes    Index
------------------------------------------------------------------------------
2C1D9441    20   0     A 38E479DB    0   1   473     0     0      0        0
------------------------------------------------------------------------------
Dongles search is complete with: No errors
Set find only Guardant StealthII/Sign/Time dongle: No errors
The Guardant StealthII/Sign/Time dongle with this access codes not found!

Т.е.
            nGrdE = GrdApi.GrdLogin(grdHandle, GrdLM.PerStation);
говорит, что Guardant.GrdE.DongleNotFound


Коды указывал свои. Ключик рабочий, при общении на С++ с ним всё в порядке.
Ключик StealthII Micro


Информация о системе 04.04.2019 14:23:30

 
Процессор Intel(R) Core(TM) i5-2300 CPU @ 2.80GHz
Материнская плата Gigabyte Technology Co., Ltd. H77M-D3H
Операционная система Microsoft Windows 7 Service Pack 1 (Build 7601)
Тип системы 64-разрядная операционная система
Версия .Net Framework v1.0.3705, v1.1.4322, v2.0.50727, v3.0, v3.5, v4.0.30319
Версия драйвера Guardant 7.0.206

 
Поиск установленных ключей Guardant 04.04.2019 14:23:30

 
Модель Guardant Stealth II USB
Идентификационный номер 38E479DBh (954497499d)
Коды доступа 794P014
Дата и время выпуска 04 Jul 2018 15-14-54
Поддержка Windows, GSII64

Номер продукта 0 Версия ключа 2.0
Версия продукта 1 Тип микроконтроллера 05
Серийный номер 473 Номер программы 0, 0, 0, 81
Маска 0   
Счётчик запусков 0   

Состояние микропрограммы OK

Re: Странная проблема с API C#

Покажите как передаете свои коды доступа в коде, пожалуйста.

(2019-04-04 14:53:46 отредактировано Виктор Блинов)

Re: Странная проблема с API C#

nGrdE = GrdApi.GrdSetAccessCodes(grdHandle, PublicCode + CryptPU, ReadCode + CryptRD); //, WriteCode + CryptWR);
Как в примере написано...
Писать в ключик в этом приложении никто не будет, так что только чтение...

Re: Странная проблема с API C#

Виктор Блинов пишет:

при общении на С++ с ним всё в порядке.

Значит с самим ключом проблем нет.
Надо перепроверить значения кодов для переменных PublicCode и ReadCode.
Если все правильно, то пришлите нам проект с этим примеров на hotline@guardant.ru

Re: Странная проблема с API C#

Отправил.

Re: Странная проблема с API C#

Антон, есть какие идеи? В чём беда то?

Re: Странная проблема с API C#

Виктор Блинов пишет:

Антон, есть какие идеи? В чём беда то?

В 23 строке переменная CryptRD почему то складывается с ReadCode, а должна вычитаться потому что в 72 строке значения этих же переменных складываются.
Т.е. должно быть так:

static uint ReadCode = 0xXXXXXXXXu - CryptRD;

Re: Странная проблема с API C#

Позор на мои седины!
ReadCode слишком маленький, вот к нему и прибавил.
Да, всё прошло.
Большое спасибо!

Re: Странная проблема с API C#

Здравствуйте, 1 в 1 проблема как у автора темы, пару месяцев назад скачивал, можно тоже на e-mail решение?

Re: Странная проблема с API C#

Еще добавлю к последнему, что у меня Guardant хорошо отрабатывает в проектах типа Application, проблема только в class library - это c# asp net mvc проект, которому требуется записывать в автоматическом режиме ключи

Re: Странная проблема с API C#

Здравствуйте.

Решение опубликовано в этой же ветке.

Антон Тихиенко пишет:
Виктор Блинов пишет:

Антон, есть какие идеи? В чём беда то?

В 23 строке переменная CryptRD почему то складывается с ReadCode, а должна вычитаться потому что в 72 строке значения этих же переменных складываются.
Т.е. должно быть так:

static uint ReadCode = 0xXXXXXXXXu - CryptRD;

Суть в неправильной передаче кодов доступа.
У себя проверяли, коды указаны верно?