Java 使用JNA调用Gdi32.GetObject

Java 使用JNA调用Gdi32.GetObject,java,winapi,jna,Java,Winapi,Jna,为了调用Gdi32库的“GetObject”,我为JNA创建了一个本机库映射 我的映射如下所示: int GetObject(HANDLE hgdiobj, int cbBuffer, Pointer lpvObject); 但这个签名似乎不正确。调用会引发此异常: Exception in thread "JavaFX Application Thread" java.lang.UnsatisfiedLinkError: Error looking up function 'GetObjec

为了调用Gdi32库的“GetObject”,我为JNA创建了一个本机库映射

我的映射如下所示:

int GetObject(HANDLE hgdiobj, int cbBuffer, Pointer lpvObject);
但这个签名似乎不正确。调用会引发此异常:

Exception in thread "JavaFX Application Thread" java.lang.UnsatisfiedLinkError: Error looking up function 'GetObject': The specified procedure couldn't be found.

怎么了?

您需要的信息可以在链接到的文档中找到。该文件的底部是:

DLL Gdi32.dll Unicode and ANSI names GetObjectW (Unicode) and GetObjectA (ANSI) DLL Gdi32.DLL Unicode和ANSI名称GetObjectW(Unicode)和GetObjectA(ANSI)
换句话说,该函数位于名为
Gdi32.DLL
的DLL中。有两个版本,一个是Unicode版本,一个是ANSI版本,有适当的后缀名。您可能正试图绑定到一个名为
GetObject
的函数,该函数不存在。

您可以使用传递给JNA库初始值设定项的选项自动处理大部分a/W拆分。用于将Java
字符串
和未修饰的函数名(例如
GetObject
)自动映射到其相应的本机等效项(ASCII字符串和
GetObjectA
或unicode字符串和
GetObjectW
)。