Unity3d + Guardant

Добрый день.
Пытаемся подружить Unity3d с ключами Guardant, но возникла следующая проблема.
Вот скрипт из Unity, который вешается на простой Cube:

    void Start () {
        ProgramNumber = 0;
        Version = 1;
        DongleID = 0;
        SerialNumber = 0;
        BitMask = 0;
        DongleID = 0;
        RemoteMode = GrdFMR.Local;
        DongleFlags = GrdFM.Mask;
        DongleType = GrdDT.ALL;
        DongleModel = GrdFMM.ALL;
        DongleInterface = GrdFMI.USB;
    }
        void Awake()
    {
        Handle GrdHandle = new Handle();

        RetCode = (uint) GrdApi.GrdStartup (GrdFMR.Local);
        ErrorHandling (GrdHandle, RetCode);
   
        GrdHandle = GrdApi.GrdCreateHandle (GrdCHM.MultiThread);
        if (GrdHandle.Address == IntPtr.Zero)
        {
            ErrorHandling (new Handle(IntPtr.Zero), (uint)GrdE.MemoryAllocation);
        }
       
        RetCode = (uint)GrdApi.GrdSetAccessCodes (GrdHandle, PublicCode + CryptPU, ReadCode + CryptRD, WriteCode + CryptWR, MasterCode + CryptMS);
        ErrorHandling (GrdHandle, RetCode);

        RetCode = (uint)GrdApi.GrdSetFindMode (GrdHandle, RemoteMode, DongleFlags, ProgramNumber, DongleID, SerialNumber, Version, BitMask, DongleType, DongleModel, DongleInterface);
        ErrorHandling (GrdHandle, RetCode);
       
        int LMS = -1;
        RetCode = (uint)GrdApi.GrdLogin (GrdHandle, LMS, GrdLM.PerStation);
        ErrorHandling (GrdHandle, RetCode);
       
        GrdApi.GrdCloseHandle (GrdHandle);
        GrdApi.GrdCleanup();
    }

При работе с функцией GrdSetFindMode вылетает ошибка:

NullReferenceException: Object reference not set to an instance of an object
PlatformInvoker.Invoke (System.Object[] args)
(wrapper remoting-invoke-with-check) PlatformInvoker:Invoke (object[])
Guardant.GrdApi.GrdSetFindMode (Handle grdHandle, GrdFMR remoteMode, GrdFM flags, UInt32 prog, UInt32 id, UInt32 sn, UInt32 ver, UInt32 mask, GrdDT type, GrdFMM models, GrdFMI interfaces)
GuardantScript.Awake ()

Заранее, спасибо)

Re: Unity3d + Guardant

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

Для указанной среды разработки тестирование наших ключей не проводилось и сейчас не совсем понятно насколько совместимо наше .Net-API с указанным средством разработки.

В целях дальнейшей диагностики пришлите нам (на e-mail: hotline@guardant.ru ) проект тестового приложения, где наблюдается описанное поведение, а также укажите версию комплекта разработчика, используемого Вами.

(2021-04-01 11:40:51 отредактировано zeblong)

Re: Unity3d + Guardant

Нынче все работает.
GrdApi.GrdStartup(GrdFMR.Local) - если делать All - не может создать какой то файл

Re: Unity3d + Guardant

zeblong пишет:

Нынче все работает.
GrdApi.GrdStartup(GrdFMR.Local) - если делать All - не может создать какой то файл

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

Насколько я понял, при вызове метода GrdApi.GrdStartup с параметром GrdFMR.Local, все нормально отрабатывает и с ключом работать получается, верно?

Насчет параметра All — API может быть проинициализировано в трех режимах:

  • локальный — GrdFMR.Local

  • сетевой — GrdFMR.Remote

  • комбинированный — GrdFMR.All

В сетевом режиме API всегда пытается сгенерировать файл-конфиг (gnclient.ini), который заполняется по результатам широковещательного поиска сервера (GLDS.exe) с ключом.

В комбинированном режиме API тоже может пытаться создавать этот конфиг, если локально не смогло найти ключ на той же машине, где оно само работает.

Если приложение, инициализирующее Guardant API, запущено из директории, куда у него нет прав на запись, то в таком случае будет возвращаться ошибка. Вероятно, это как раз такой кейс.