Я пытаюсь создать .NET DLL, чтобы я мог использовать криптографические функции с моим приложением, отличным от .NET.
Я создал библиотеку классов с таким кодом:
namespace AESEncryption
{
public class EncryptDecrypt
{
private static readonly byte[] optionalEntropy = { 0x21, 0x05, 0x07, 0x08, 0x27, 0x02, 0x23, 0x36, 0x45, 0x50 };
public interface IEncrypt
{
string Encrypt(string data, string filePath);
};
public class EncryptDecryptInt:IEncrypt
{
public string Encrypt(string data, string filePath)
{
byte[] plainKey;
try
{
// Read in the secret key from our cipher key store
byte[] cipher = File.ReadAllBytes(filePath);
plainKey = ProtectedData.Unprotect(cipher, optionalEntropy, DataProtectionScope.CurrentUser);
// Convert our plaintext data into a byte array
byte[] plainTextBytes = Encoding.ASCII.GetBytes(data);
MemoryStream ms = new MemoryStream();
Rijndael alg = Rijndael.Create();
alg.Mode = CipherMode.CBC;
alg.Key = plainKey;
alg.IV = optionalEntropy;
CryptoStream cs = new CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(plainTextBytes, 0, plainTextBytes.Length);
cs.Close();
byte[] encryptedData = ms.ToArray();
return Convert.ToString(encryptedData);
}
catch (Exception ex)
{
return ex.Message;
}
}
}
}
}
В моем приложении VC ++ я использую директиву #import для импорта файла TLB, созданного из DLL, но единственными доступными функциями являются _AESEncryption и LIB_AES и т. Д.
Я не вижу интерфейс или функцию Encrypt.
Когда я пытаюсь создать экземпляр, чтобы я мог вызвать функции в моей программе VC ++, я использую этот код и получаю следующую ошибку:
HRESULT hr = CoInitialize(NULL);
IEncryptPtr pIEncrypt(__uuidof(EncryptDecryptInt));
ошибка C2065: 'IEncryptPtr': необъявленный идентификатор
ошибка C2146: синтаксическая ошибка: отсутствует ';' перед идентификатором 'pIEncrypt'