2011-06-30 73 views
0

我有一個gtop11dotnet.dll。它是金雅拓網站上用於Windows v2.2.0.9的.NET PKCS#11 Library。 DLL包含C_GetCardProperty方法,可用於檢索智能卡的序列號或GUID。根據PKCS#11用戶指南和.NET集成指南,它是「byte [] GetCardProperty(字節屬性,字節標誌)」。它接收兩個字節作爲參數並檢索例如序列號或字節數組形式的GUID。 我的問題是如何獲取序列號並將其存儲到託管字節數組中?在c中從gtop11dotnet.dll獲取一個字節數組#

這裏是我的嘗試:

[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. 
} 

感謝您的幫助。

回答

0

什麼是「.NET PKCS#11」? PKCS#11 v2.20和v2.30草案不包含「C_GetCardProperty」方法。您可能正在面對一些專有的金雅拓/ .NET的東西,它與世界其他地方已知的PCKS#11無關,而金雅拓通過在「C_」前加上任意函數並將結果稱爲cryptoki來做一件「好事」 。 PKCS#11是一個C接口,與託管/非託管代碼或.NET無關。

+0

是的,它是一個專有的金雅拓功能。我從[Gemalto網站]下載(http://www.gemalto.com/products/dotnet_card/resources/libraries.html?toggler=0),安裝並獲得了C:\ Program Files \ Gemalto \ DotNet中的gtop11dotnet.dll PKCS11。在那個DLL裏面有C函數C_GetCardProperty,我用Dependency Walker對它進行了雙重檢查。但是如何獲得該函數返回的序列號或GUID? – Almir

+0

對不起,你需要問金雅拓。更好的是 - 告訴他們放棄該功能或將其重命名爲Gemalto_GetCardProperty - 濫用PKCS#11不會導致任何問題。 –

0

試試這個。公共靜態外部uint C_GetCardProperty(uint slotID,字節屬性,字節標誌,字節[] blob,參考字節長度);

相關問題