.net 从c中的gtop11dotnet.dll获取字节数组#

.net 从c中的gtop11dotnet.dll获取字节数组#,.net,smartcard,pkcs#11,.net,Smartcard,Pkcs#11,我有一个gtop11dotnet.dll。它是Gemalto网站上的.NET PKCS#11 Windows v2.2.0.9库。DLL包含可用于检索智能卡序列号或GUID的C_GetCardProperty方法。根据PKCS#11用户指南和.NET集成指南,它是“byte[]GetCardProperty(byte属性,byte标志)”。它接收两个字节作为参数,并以字节数组的形式检索例如序列号或GUID。 我的问题是如何获取序列号并将其存储到托管字节数组中 以下是我的尝试: [DllImpor

我有一个gtop11dotnet.dll。它是Gemalto网站上的.NET PKCS#11 Windows v2.2.0.9库。DLL包含可用于检索智能卡序列号或GUID的C_GetCardProperty方法。根据PKCS#11用户指南和.NET集成指南,它是“byte[]GetCardProperty(byte属性,byte标志)”。它接收两个字节作为参数,并以字节数组的形式检索例如序列号或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.
}
谢谢您的帮助。

什么是“.NET PKCS#11”?PKCS 11 v2.20或v2.30草稿不包含“C#u GetCardProperty”方法。您可能正面临一些与PCKS#11无关的专有Gemalto/.NET问题,正如世界其他地方所知,Gemalto通过在任意函数前加上“C#u”并调用结果cryptoki做了一件“好事”。PKCS#11是一个C接口,与托管/非托管代码或.NET无关。

试试这个


公共静态外部uint C_GetCardProperty(uint slotID,字节属性,字节标志,字节[]blob,引用字节长度)

是的,这是一个专有的Gemalto函数。我从C:\Program Files\Gemalto\DotNet PKCS11下载并安装了gtop11dotnet.dll。在这个DLL中有一个C函数C_GetCardProperty,我用Dependency Walker仔细检查了它。但是如何获取函数返回的序列号或GUID?很抱歉,您需要询问Gemalto。更好的办法是——告诉他们放弃函数或将其重命名为Gemalto#u GetCardProperty——滥用PKCS#11不会带来任何好处。