Добрый день!
Ещё вопрос по загружаемому коду. Правильно ли я понимаю, что при вызове функции
int GRD_API GrdCodeRun(
HANDLE hGrd,
DWORD dwAlgoName,
DWORD dwP1,
DWORD *pdwRet,
DWORD dwDataFromDongleLng,
void *pDataFromDongle,
DWORD dwDataToDongleLng,
void *pDataToDongle,
void *pReserved );
параметры dwDataFromDongleLng и dwDataToDongleLng всегда должны содержать размер буфера в байтах, не зависимо от того, каким типом он объявлен в программе?
Объявляю в коде ключа
extern DWORD idata[] ALIGNED;
extern DWORD odata[] ALIGNED;
а в основной программе
DWORD abInBuffer[128], abOutBuffer[128];
При вызове
nRet = GrdCodeRun(GrdDongle.GetHandle(),
0x01, // dwAlgoName
1, // dwP1
&dwRet, // pdwRet
0, // dwDataFromDongleLng
NULL, // pDataFromDongle
1, // dwDataToDongleLng
abOutBuffer, // pDataToDongle
NULL); // pReserved
в ключ попадает один байт, а при вызове
nRet = GrdCodeRun(GrdDongle.GetHandle(),
0x01, // dwAlgoName
1, // dwP1
&dwRet, // pdwRet
0, // dwDataFromDongleLng
NULL, // pDataFromDongle
sizeof(DWORD), // dwDataToDongleLng
abOutBuffer, // pDataToDongle
NULL); // pReserved
всё работает корректно.