| ||||
| ||||
Есть следующий код на 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 вообще "не знает" ничего кроме своих функций. | ||||
Ответы: | ||||
| ||||
проблема решилась: memcpy(certificate, certContext->pbCertEncoded, certContext->cbCertEncoded); | ||||