Либо вы передаете дескриптор TEncrypt с помощью параметра (конструктор / метод) , либо вы делаете его доступным с помощью глобальной переменной . Я бы предпочел первое, поскольку глобальные переменные затрудняют понимание, сопровождение и тестирование кода.
Доступность также может быть косвенной, например, Вы передаете объект в TEncrypt::Encryption()
, который обеспечивает доступ к дескриптору одним из его открытых методов.
(конечно, вы также можете передать его через файл, БД, ... но давайте сосредоточимся на программе.)
Обновление: пример
class TEncrypt
{
public:
int Encrypt(HCRYPTPROV& mhProvider);
private:
int GenerateEncryptionKey(HCRYPTPROV& mhProvider);
HCRYPTKEY mhKey;
};
//------------------------------------
int TEncrypt::Encrypt(HCRYPTPROV& mhProvider)
{
vStatus = GenerateEncryptionKey(mhProvider);
// will go on to perform encryption after obtaining the key
return(vStatus);
}
//------------------------------------
int TEncrypt::GenerateEncryptionKey(HCRYPTPROV& mhProvider)
{
BOOL bRet = CryptGenKey(mhProvider,
CALG_AES_256,
CRYPT_EXPORTABLE,
&mhKey);
}
Примечание: я переименовал TEncrypt::Encrypt
, потому что в качестве имен методов лучше использовать глаголы, а не существительные.