Странное поведение примера "03 - Preserved Variables"

Решил поэкспериментировать с примером "03 - Preserved Variables" для Code-ключей. В оригинальном примере загружаемый код вызывается дважды: один раз с параметром dwP1=1 (чтобы сохранить буфер в RAM-ключа), второй раз с параметром dwP2=2 (чтобы получить содержимое из RAM-ключа).
Оказалось, что если второй раз вызвать загружаемый код с параметром dwP1=3 (так чтобы ничего не выполнялось и вернулась -1), то в массив abInBuffer все равно записывается содержимое RAM ключа, хотя перед вызовом этот массив явно обнуляется, а внутри ключа (в коде) явного копирования не происходит. Сначала решил, что каким-то образом iodata[] и buffer[100] указывают на одну и ту же область памяти, но потом проверил адреса массивов и они оказались разные.

Поясните, пожалуйста, почему в массив abInBuffer (в основной программе) автоматически записывается содержимое buffer[100] (из ключа), несмотря на то, что я передаю dwP1=3, и соответственно, код копирования не выполняется (проверял)?

Re: Странное поведение примера "03 - Preserved Variables"

Правильно ли я понимаю, что буферы ввода-вывода в ключе:
1) Сохраняют свои данные между вызовами загружаемого кода точно также, как и NO_INIT-переменные?
2) Размер буфера определяется не размером, указанном в коде для ключа, а размером заданном в makefile? Т.е. например, если в коде буфер буден задан как char iodata[512], а в makefile CFG_OUTPUT_BUFFER_SIZE=0x400, то реальный размер буфера будет 0x400, а не 0x200?

Re: Странное поведение примера "03 - Preserved Variables"

Здравствуйте!
Мы переадресовали Ваши вопросы нашим разработчикам. Ответ будет до конца этой недели.

Re: Странное поведение примера "03 - Preserved Variables"

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

1. Буфер ввода  неявно обновляется при вызове (новыми данными если они переданы ключу).
Буфер вывода не обновляется.

2. Правильнее будет объявлять extern DWORD iodata[] c указанием размера в makefile.

Re: Странное поведение примера "03 - Preserved Variables"

dayznse пишет:

Решил поэкспериментировать с примером "03 - Preserved Variables" для Code-ключей. В оригинальном примере загружаемый код вызывается дважды: один раз с параметром dwP1=1 (чтобы сохранить буфер в RAM-ключа), второй раз с параметром dwP2=2 (чтобы получить содержимое из RAM-ключа).
Оказалось, что если второй раз вызвать загружаемый код с параметром dwP1=3 (так чтобы ничего не выполнялось и вернулась -1), то в массив abInBuffer все равно записывается содержимое RAM ключа, хотя перед вызовом этот массив явно обнуляется, а внутри ключа (в коде) явного копирования не происходит. Сначала решил, что каким-то образом iodata[] и buffer[100] указывают на одну и ту же область памяти, но потом проверил адреса массивов и они оказались разные.

Поясните, пожалуйста, почему в массив abInBuffer (в основной программе) автоматически записывается содержимое buffer[100] (из ключа), несмотря на то, что я передаю dwP1=3, и соответственно, код копирования не выполняется (проверял)?

В примере 3 буфер iodata используется как буфер ввода и вывода: 
При вызове GrdCodeRun в буфер abInBuffer неявно записываются данные из массива iodata ( которые были записаны в dwP1=1)

Re: Странное поведение примера "03 - Preserved Variables"

Станислав Петрушевский пишет:

При вызове GrdCodeRun в буфер abInBuffer неявно записываются данные из массива iodata ( которые были записаны в dwP1=1)

Т.е.:
1) Буфер вывода ведет себя аналогично NO_INIT-переменной?
2) Получается, что демонстрационный пример следует изменить, т.к. сейчас он демонстрирует то, без чего он и так "работает")

Re: Странное поведение примера "03 - Preserved Variables"

Здравствуйте!
На этой недели выходит Guardant SDK Update 2, в его составе будет исправленный пример.