1

我正在尝试使用 SCardGetAttrib (Winscard.dll) 函数在带有 Java JNA 的 Windows-PC 上读取阅读器属性,但我不知道如何使用 JNA 来获得我想要的东西。

这是界面:

public interface Winscard extends Library  {
  Winscard INSTANCE = (Winscard) Native.loadLibrary("winscard", Winscard.class);

  NativeLong sCardGetAttrib(NativeLong hCard, int dwAttrId, ByteBuffer pbAttr, IntBuffer pcbAttrLen);

}

我从http://crypto-native.sourceforge.net/crypto-native-pcsc/apidocs/net/sf/crypton/scard/pcsclite/PcscliteLibrary.html#SCardGetAttrib%28com.sun.jna.NativeLong 获取类型签名, %20int,%20java.nio.ByteBuffer,%20java.nio.IntBuffer%29但当然这是 PcscliteLibrary 的签名。我希望它与 Winscard 函数足够相似。那么我在哪里可以获得函数的正确签名呢?

我尝试使用它调用该函数,只是为了尝试它是否有效:

public static void main(String[] args) {
  IntBuffer b = IntBuffer.allocate(1024);
  Winscard winscard = Winscard.INSTANCE;
  winscard.sCardGetAttrib(null, 0, null, b);
}

但我得到:

java.lang.UnsatisfiedLinkError: Error looking up function 'sCardGetAttrib':

实际上,我需要使用 SCARD_ATTR_DEVICE_FRIENDLY_NAME 或 SCARD_ATTR_VENDOR_NAME 之类的东西作为 dwAttrId。

抱歉,我对这个主题知之甚少。有人可以帮忙吗?

4

0 回答 0