как использовать API

Post here any topics that related to Enigma Protector, its functionality, your misunderstanding, offers to improvements etc etc etc
Post Reply
marulina_ng
Posts: 9
Joined: Tue Mar 26, 2019 8:10 am

как использовать API

Post by marulina_ng » Mon Apr 29, 2019 1:42 pm

Здравствуйте.
Подскажите пожалуйста что я делаю не так.
Я хотела отображать при запуске информацию о регистрации пользователя - в частности - по какое число активен ключ.
Посмотрела примеры использования enigma_ide, и взяла из примера KeyInformation функцию EP_RegKeyInformation.
Кинула dll в проект, подключила enigma юнит. защитила приложение, запустила. но функция ничего не возвращает.
я попробовала заключить ее в маркеры reg_crypt_begin-reg_crypt_end, но тоже без результата.
Не могу понять - приложение зарегестрировано. я передаю в функцию данные из файла с рег.информацией. при защите в логе была информация что видит и функцию и маркеры. а в итоге пусто. Функция ничего не возвращает.
Может надо как то настраивать проект дополнительно? в файлах что лежат в примере я ничего такого не нашла. ну или не поняла.
у меня enigma protector 6.40

Enigma
Site Admin
Posts: 2516
Joined: Wed Aug 20, 2008 2:24 pm

Re: как использовать API

Post by Enigma » Mon Apr 29, 2019 2:24 pm

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

Давайте искать, в чем же проблема.
1. Посмотрите в настройках проекта Registration Features - Common, включена ли галочка Unicode. Если включена, то надо использовать функцию EP_RegKeyInformationW
2. Какой все таки результат возвращает EP_RegKeyInformation, true или false?
3. Примеры использования есть в каталоге Examples\KeyInformation

marulina_ng
Posts: 9
Joined: Tue Mar 26, 2019 8:10 am

Re: как использовать API

Post by marulina_ng » Tue Apr 30, 2019 5:46 am

доброе утро

по порядку - в проекте галочка не отмечена.
результат возвращает false и я не могу понять почему.
именно из этого примера я и взяла полностью функцию - попробовать.

я сейчас еще раз провела тест. добавила еще маркеры - если приложение не зарегистрировано.
у меня сначала возможность тестового периода, с возможностью регистрации.
нажимаю кнопку попробовать - срабатывают маркеры что программа не зарегистрирована.
регистрируюсь - срабатывают маркеры что приложение зарегистрировано , но функция все равно возвращает false.

а такой вопрос - у меня регистрационные данные хранятся только в файле. Может функция работает только с реестром?

Enigma
Site Admin
Posts: 2516
Joined: Wed Aug 20, 2008 2:24 pm

Re: как использовать API

Post by Enigma » Tue Apr 30, 2019 6:50 am

Давайте маркеры пока исключим из тестирования, они тут не причем и нам не помогут.

Вы, как я понимаю, используете Delphi? Тогда давайте вот что сделаем:
1. Вызывайте EP_RegLoadAndCheckKey, чтобы проверить, что программа зарегистрирована
2. Вызывайте EP_RegistrationLoadKeyA чтобы загрузить рег. информацию
3. Потом можно вызывать EP_RegKeyInformation с именем и ключем, которые получены в #2.

Я думаю все будет работать.

Если ключ с ограничением по дате использования Expiration Date, то делать все, что написано выше, нет смысла, можно сделать проще:
1. Вызывайте EP_RegLoadAndCheckKey, чтобы проверить, что программа зарегистрирована
2. Затем EP_RegKeyExpirationDate чтобы узнать дату окончания работы ключа.

И последнее, советую все таки использовать Unicode в настройках и функции с W постфиксом.

marulina_ng
Posts: 9
Joined: Tue Mar 26, 2019 8:10 am

Re: как использовать API

Post by marulina_ng » Tue Apr 30, 2019 6:53 am

я ваш пост не видела и начала просто пробовать.

я последовательно попробовала все функции EP_RegKeyInformation, и функция EP_RegKeyInformationW вернула результат. Но ведь в проекте у меня не отмечен UNICODE. и при защите приложения у меня в логе был Warning - что найдена функция с использованием юникода, а у вас в проекте не включены соответствующие опции.
но что-то мне не кажется что это правильно. сейчас попробую переделать как вы написали.

Enigma
Site Admin
Posts: 2516
Joined: Wed Aug 20, 2008 2:24 pm

Re: как использовать API

Post by Enigma » Tue Apr 30, 2019 11:13 am

Скорее всего, Вы передаете в параметры к функции EP_RegKeyInformation не PAnsiChar, а PWideChar, поэтому EP_RegKeyInformationW и работает.

Чтобы работала функция EP_RegKeyInformation, Ваши WideString параметры надо преобразовать так:

EP_RegKeyInformation(PAnsiChar(AnsiString(name)), PAnsiChar(AnsiString(key)), ki);

Post Reply