Java 将Winscard.dll与JNA一起使用
我正在尝试使用scardgettrib(Winscard.dll)函数在带有Java JNA的Windows PC上读取阅读器属性,但我不知道如何确切地使用JNA来获得我想要的 这是接口:Java 将Winscard.dll与JNA一起使用,java,dll,jna,Java,Dll,Jna,我正在尝试使用scardgettrib(Winscard.dll)函数在带有Java JNA的Windows PC上读取阅读器属性,但我不知道如何确切地使用JNA来获得我想要的 这是接口: public interface Winscard extends Library { Winscard INSTANCE = (Winscard) Native.loadLibrary("winscard", Winscard.class); NativeLong sCardGetAttrib(
public interface Winscard extends Library {
Winscard INSTANCE = (Winscard) Native.loadLibrary("winscard", Winscard.class);
NativeLong sCardGetAttrib(NativeLong hCard, int dwAttrId, ByteBuffer pbAttr, IntBuffer pcbAttrLen);
}
我从中获取了类型签名,但这当然是PCSClite库的签名。我希望它与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\u ATTR\u DEVICE\u-FRIENDLY\u NAME或SCARD\u ATTR\u VENDOR\u NAME作为dwAttrId
对不起,我对这个主题的了解很少。有人能帮忙吗?尝试
SCard…
而不是SCard…
。之后,在理解应该传递给函数的参数之前,您将遇到问题。您正在传递一个空缓冲区,以及一个未初始化的、分配的大小为1024的缓冲区,用于保存您的数据缓冲区大小。非常感谢,现在它可以工作了,我可以读取属性了。然而,这仅在读卡器处有卡时才起作用。我把它贴在这里:。也许你可以再帮我一次。我会很高兴的!对于那些感兴趣的人:问题已经解决了,您可以在另一个线程中找到代码(前面注释中的链接)。