Я пытаюсь создать .NET DLL, поэтому я могу использовать криптографические функции с моим не .NET-приложением.Попытка создать .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 и т. д.
Я не вижу интерфейс или функцию Шифрование.
Когда я пытаюсь создать экземпляр, так что я могу вызывать функции в моей программе VC++, я использую этот код и получить следующее сообщение об ошибке:
HRESULT hr = CoInitialize(NULL);
IEncryptPtr pIEncrypt(__uuidof(EncryptDecryptInt));
ошибка C2065: «IEncryptPtr»: необъявленный идентификатор
ошибка C2146: синтаксическая ошибка: отсутствует ';' перед идентификатором 'pIEncrypt'
Но не Microsoft ли это обратно совместимо, следовательно COM совместимость? – 2010-04-07 13:16:22
Ты прав, забыл об этом. Вот статья, в которой показано, как это сделать. – kemiller2002