Александра Старчаус пишет:Если из-за настроек сети ей это не удастся, то рядом с программой нужно положить файл gnclient.ini
вы уверены, что сей пассаж применим к вашему SLK? я сделал простую вещь - поиск в TotalCmd по каталогу c:\Program Files (x86)\Guardant\ вместе с подкаталогами (у меня установлены SDK и SLK), по всем файлам, содержащим текст "gnclient.ini" - и чего вы хотите? было найдено множество файлов в каталоге SDK, и ни одного(!) в SLK
ок, теперь давайте более профессионально - я ведь не спроста задал вопрос, перед этим всё проверил, скомпилировав тестовую программу, обратимся к ней:
uses
SysUtils, Windows, GRDDelphi, grdlic;
const
PUBLIC_CODE = $...; // публичный код ключа
var
Visibility: AnsiString;
RawLicenseInfoList: PAnsiChar;
Codes: TGrdVendorCodes;
nRet: Integer;
hGrd: HANDLE;
abyGrd: array[0..GrdContainerSize] of Byte;
dwID: DWORD;
GrdFindInfo: TGrdFindInfo;
begin
// grdlic
Visibility:= '{ "controlCenter": { "hostName": [ "192.168.130.108" ] } }';
Codes.publicCode:= PUBLIC_CODE;
nRet:= GrdGetLicenseInfo(nil{@Visibility[1]}, @Codes, @RawLicenseInfoList);
...
// grdapi
nRet:= GrdStartup(GrdFMR_Local or GrdFMR_Remote);
hGrd:= GrdCreateHandle(@abyGrd, GrdCHM_MultiThread, nil );
nRet:= GrdSetAccessCodes(hGrd, PUBLIC_CODE, 0, 0, 0);
nRet:= GrdSetFindMode(hGrd, GrdFMR_Local or GrdFMR_Remote, 0, 0, 0, 0, 0, 0, 0, GrdFMM_ALL, GrdFMI_ALL );
nRet:= GrdFind(hGrd, GrdF_First, @dwID, @GrdFindInfo);
...
end.
файл gnclient.ini (лежит в каталоге программы)
[client]
uuid = {00000000000000000000000000000000}
host_id = 8371539329226683901
reconnect_try_number = 2
bc_re-search_server = NO
[server]
ip_name = 192.168.130.108
ip_name_secondary =
port = 3186
message_port = 3187
bc_addr = 255.255.255.255
search_requests_number = 1
[timeout]
to_search = 5
to_receive = 30
при работе с локальным ключом всё ок, обе библиотеки его находят, в т.ч. GrdGetLicenseInfo с пустым Visibility (=nil)
сетевой ключ находится на хосте 192.168.130.108, мой локальный хост 192.168.5.69 (подключаюсь через VPN)
если запустить программу "как есть", то "GrdGetLicenseInfo(nil, ..." вернёт статус 34, которого нет даже в вашей документации по SLK https://dev.guardant.ru/pages/viewpage. … d=71485820, в исходниках:
GRD_NO_RESULTS_FOUND = 34; { No any results found }
да, я пробовал урезать файл gnclient.ini до одного параметра [server] ip_name - то же самое
grdapi всё находит (используя gnclient.ini)
если раскомментарить код "GrdGetLicenseInfo(@Visibility[1], ..." - то grdlic ключ находит. будете чинить? а то нелогично - тащить "низкий" уровень (список хостов для поиска ключа) в приложение!
а про "Guardant Control Center" я спросил, потому что, на мой взгляд, было бы логично использовать его настройки, раз уж они есть, и там есть список хостов с ключами... grdlic не работает с этим веб-сервисом?
PS. как-то всё мудрёно у Guardant по сравнению с HASP - там драйвер и License Manager в одном флаконе, есть веб-интерфейс "Admin Control Center", в котором прописаны хосты для поиска лицензий - всё! все приложения работают через API с этими настройками! а тут надо у каждого(!) приложения в рабочий каталог положить файл gnclient.ini - зачем такое? может, есть "магический" путь, по которому этот файл ищется всегда (например, у HASP это c:\Program Files (x86)\Common Files\Aladdin Shared\HASP\hasplm.ini)
PPS. нашёл похожую тему (вопрос аналогичен моему) - https://forum.guardant.ru/topic/983/