Попробуй поменять в методе AcquireContext код на следующий
X++:
#define.PROV_RSA_FULL(1)
#define.CRYPT_NEWKEYSET(0x00000008)
#define.NTE_BAD_KEYSET( 0x80090016 )
private void AcquireContext()
{
DLLFunction _CryptAcquireContext = new DLLFunction(_dll, "CryptAcquireContextA");
Binary prov = new Binary(4);
int err;
;
_CryptAcquireContext.returns(ExtTypes::DWord);
_CryptAcquireContext.arg(ExtTypes::Pointer, ExtTypes::String, ExtTypes::DWord,
ExtTypes::DWord, ExtTypes::DWord);
prov = new Binary(4);
if (!_CryptAcquireContext.call(prov, "AxaptaKeyset", 0, #PROV_RSA_FULL, 0))
{
err = winapi::getLastError();
if (err == #NTE_BAD_KEYSET)
{
if (!_CryptAcquireContext.call(prov, "AxaptaKeyset", 0, #PROV_RSA_FULL, #CRYPT_NEWKEYSET))
{
_prov = 0;
}
else
{
_prov = prov.dWord(0);
}
}
}
else
_prov = prov.dWord(0);
}
Имя кейсета можно поставить какое нужно. Или ставить 0 как раньше, что бы создался keyset по умолчанию