我必须使用WinScard.dll库来访问智能卡。我有一个Java应用程序,它加载并使用这个库来访问智能卡。
32位系统:最初我们的应用程序是为32位Windows编写的。因此,下面的库接口工作得很好。
SCard INSTANCE = (SCard)Native.loadLibrary("C:\\Windows\\SysWOW64\\WinSCard.dll", SCard.class);
public int SCardEstablishContext(int iScope, Pointer pvReserved1, Pointer pvReserved2, /*OUT &long*/LongByReference rRdrlHandle);
public int SCardGetStatusChangeA(int iHandle, int dwTimeout, /*IN/OUT*/SCardReaderState.ByReference rgReaderStates, int cReaders);64位系统:现在,当我们将应用程序迁移到64位窗口时,我们意识到,为了使其工作,我们需要使所有的iHandle长整数整数。因此,以下工作
SCard INSTANCE = (SCard)Native.loadLibrary("C:\\Windows\\System32\\winscard", SCard.class);
public int SCardEstablishContext(int iScope, Pointer pvReserved1, Pointer pvReserved2, /*OUT &long*/LongByReference rRdrlHandle);
public int SCardGetStatusChangeA(long iHandle, int dwTimeout, /*IN/OUT*/SCardReaderState.ByReference rgReaderStates, int cReaders);
Note: Point of interest is the first param to the SCardGetStatusChangeA api exposed by the library . 所以现在我的问题是:
Scenario 1 :获得处理程序:正确
Scenario 2 (在64位系统上运行,但使用32位工件):
获得处理程序:不正确
场景2不应该由WOW64子系统自动处理。我读到WOW64会自动转换数据结构,这样32位应用程序就可以在64位系统上运行。
有人能建议我如何让我的应用程序在32位和64位系统上运行,而不需要每次更改iHandle的接口吗?
https://stackoverflow.com/questions/19352864
复制相似问题