Получить байтовый массив из gtop11dotnet.dll в c # - PullRequest
0 голосов
/ 30 июня 2011

У меня есть gtop11dotnet.dll. Это библиотека .NET PKCS # 11 для Windows v2.2.0.9 с веб-сайта Gemalto. DLL содержит метод C_GetCardProperty, который можно использовать для получения серийного номера смарт-карты или GUID. Согласно Руководству пользователя PKCS # 11 и Руководству по интеграции .NET это «byte [] GetCardProperty (свойство байта, флаги байтов)». Он принимает два байта в качестве параметров и извлекает, например, серийный номер или GUID в виде байтового массива. У меня вопрос, как получить серийный номер и сохранить его в массиве управляемых байтов?

Вот моя попытка:

[DllImport("gtop11dotnet.dll")]
public static extern byte[] C_GetCardProperty(byte property, byte flags);
public static void Main()
{
    byte[] bytes = new byte[12];
    bytes = C_GetCardProperty(0x06, 0x00) //Error at this line -> Cannot marshal 'return value': Invalid managed/unmanaged type combination.
}

Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2013

Попробуйте это.

public static extern uint C_GetCardProperty (идентификатор слота uint, свойство байта, флаги байтов, blob байта [], длина байта ref);

0 голосов
/ 30 июня 2011

Что такое ".NET PKCS # 11"? Черновики PKCS # 11 v2.20 и v2.30 не содержат метод "C_GetCardProperty". Вы, вероятно, сталкиваетесь с какой-то проприетарной вещью Gemalto / .NET, которая не имеет ничего общего с PCKS # 11, известной остальному миру, и Gemalto делает «хорошо», добавляя префикс произвольных функций к «C_» и вызывая криптоки результата , PKCS # 11 является интерфейсом C и не имеет ничего общего с управляемым / неуправляемым кодом или .NET.

...