15.01.2007 9:47:38Небольшая проблема с импортом сертификата Ответов: 1
Андрей Горячев
Есть следующий код на C# .NET:

sign = null;
certificate = null;

if (!uni_SignMessage(message, message.Length,
certHash, certHash.Length,
null, ref signSize, null, ref certificateSize))
{
return false;
}

sign = new byte[signSize];
certificate = new byte[certificateSize];

if (!uni_SignMessage(message, message.Length,
certHash, certHash.Length,
sign, ref signSize, certificate, ref certificateSize))
{
return false;
}

где uni_SignMessage Это обёртка функции на C++, Вот она:

bool uni_SignMessage(...)
{
// что то там делаем, и получаем контекст сертификта

*certificateSize = certContext->cbCertEncoded;
certificate = certContext->pbCertEncoded;

CertCloseStore(hStoreHandle, 0);
CertFreeCertificateContext(certContext);

return true;
}

Так вот, проблема:
Когда я делаю certificate = certContext->pbCertEncoded; то в Си я при проверке вижу что туда данные нормально присвоились а уже в C# у меня масив байт нужного размера, но заполнен нулями O_O!!! Может быть как то по другому можно вернуть в C# массив байт сертификата??
А смысл этого такой, что мне нужно сохранить сертификат в файл, но лучше это сделать из .NET, т.к. C++ dll вообще "не знает" ничего кроме своих
функций.
 
Ответы:
15.01.2007 10:56:52Андрей Горячев
проблема решилась:
memcpy(certificate, certContext->pbCertEncoded, certContext->cbCertEncoded);