Tag: jna

JNA for Windows API函数GetVolumePathNamesForVolumeName

我已经成功地使用JNA调用了几个Windows API函数,但我遇到了这个问题 GetVolumePathNamesForVolumeName 完整的C声明是: BOOL WINAPI GetVolumePathNamesForVolumeName( __in LPCTSTR lpszVolumeName, __out LPTSTR lpszVolumePathNames, __in DWORD cchBufferLength, __out PDWORD lpcchReturnLength ); 我的Kernel32接口方法原型是: boolean GetVolumePathNamesForVolumeName(String lpszVolumeName, Pointer lpszVolumePathNames, int cchBufferLength, Pointer lpcchReturnLength); 我使用下面的方法加载界面 Native.loadLibrary(‘kernel32’, Kernel32.class, W32APIOptions.UNICODE_OPTIONS) 我试过了: public String[] getPathNames() { Memory pathNames = new Memory(100); Memory len = new Memory(4); if (!kernel32.GetVolumePathNamesForVolumeName(this.getGuidPath(), pathNames, 100, len)) { […]

将字符串转换为JNA的指针

我正在尝试使用JNA来查询Windows中文件的有效权限。 最后,我计划使用GetEffectiveRightsFromAcl函数 ,但为此,我需要提供一个指向填充的TRUSTEE结构的指针。 JNA平台(platform.jar)似乎没有定义这个结构,所以我试图自己定义它。 这是我到目前为止所拥有的: public static class TRUSTEE extends Structure { public TRUSTEE() { super(); } public TRUSTEE(Pointer p) { super(p); read(); } public Pointer pMultipleTrustee; public int MultipleTrusteeOperation; public int TrusteeForm; public int TrusteeType; public Pointer ptstrName; } 我正在尝试填充这样的结构: private TRUSTEE createTrusteeForCurrentUser() { TRUSTEE result = new TRUSTEE(); result.TrusteeForm = TRUSTEE_FORM.TRUSTEE_IS_NAME; result.TrusteeType = […]

使用JNA加载多个依赖库

JNA中有没有办法用Java加载多个依赖库? 我通常使用Native.loadLibrary(…)来加载一个DLL。 但我想这不会这样,因为我将此函数调用分配给实例成员。

什么是Java中的IntPtr(C#)?

什么相当于Java(JNA)中的IntPtr(C#)?

资源路径中找不到JNA本机支持(/com/sun/jna/linux-arm/libjnidispatch.so)

我已经开始构建一个java服务,它包含JNA以加载本机C / C ++库,我想在Raspberry PI aka arm平台上运行java服务。 我已成功构建了服务的稳定基础,它在Windows7和linux-amd64 / debian上运行,但是在RPI平台上我得到了上述错误:线程“main”中的exceptionjava.lang.UnsatisfiedLinkError:JNA native资源路径中找不到支持(/com/sun/jna/linux-arm/libjnidispatch.so) 在RPI上我完成了以下操作:*安装了openjdk7和java8 beta,支持arm hard float。 *安装了libjna-java lib。 以下是: Java的 root@pisces:/opt/TellstickReplay# java -version java version “1.8.0-ea” Java(TM) SE Runtime Environment (build 1.8.0-ea-b36e) Java HotSpot(TM) Client VM (build 25.0-b04, mixed mode) root@pisces:/opt/TellstickReplay# LD_LIBRARY_PATH root@pisces:/opt/TellstickReplay# echo $LD_LIBRARY_PATH /opt/lib/jna CLASSPATH root@pisces:/opt/TellstickReplay# echo $CLASSPATH /usr/lib/jna 没有任何设置似乎满足JAVA与JNA支持。 我甚至试图将jna.jar和linux-arm.jar导出到Eclipse中的项目中,并且一起将jar重建为导出的jar仍然会得到相同的错误。 导出的jar已在windows和linux上成功测试,因此jar文件正在运行。 我还尝试在jar文件中的Manifest中使用CLASSPATH,但没有成功。 我也尝试从绝对路径显式加载libjnidispatch.so,但JAVA然后开始抱怨它找不到libjnidispatch.so的文件,即使路径是100%正确。 […]

如何获取对DLL的Java JNA调用以获取参数中返回的数据?

我有这个java测试 package ftct; import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Platform; import com.sun.jna.win32.StdCallLibrary; import java.util.Date; public class LibFTCT { public LibFTCT() { } public interface LibFTCTLib extends StdCallLibrary { LibFTCTLib INSTANCE = (LibFTCTLib) Native.loadLibrary( “FTCTLib”, LibFTCTLib.class); int a(int x); int DoCommand(int Command, int Param); int GetDataRecord(int RecordNum, int StreamNum, Date ReadingTime, double AIN1, double AIN2, double AIN3, […]

如何在JavaFX中获取舞台的窗口句柄(hWnd)?

我们正在Windows中构建JavaFX应用程序,我们希望能够做一些事情来操纵我们的应用程序在Windows 7/8任务栏中的显示方式。 这需要修改名为“ 应用程序用户模型ID ”的Windows变量。 我们已经通过使用JNA设法完成了我们想要的Swing,我们想在JavaFX中重复我们的解决方案。 不幸的是,要做到这一点,我们需要能够为我们的应用程序中的每个窗口检索hWnd (窗口句柄)。 这可以通过JNA Native.getWindowPointer()方法在Swing / AWT中完成,该方法适用于java.awt.Window ,但我无法找到一个使用javafx.stage.Window执行此操作的好方法。 有没有人知道有什么方法可以获得hWnd Stage ?

JNA库比机器人类的屏幕截图慢?

由于Robot.createScreenCaputure()方法很慢,我决定使用本机库。 我搜索并找到了这个论坛 ,找到了一个使用JNA Library的特定代码snipplet 。 这是一个旧版本,所以我重写了代码: import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.DataBuffer; import java.awt.image.DataBufferInt; import java.awt.image.DataBufferUShort; import java.awt.image.DirectColorModel; import java.awt.image.Raster; import java.awt.image.WritableRaster; import com.sun.jna.Native; import com.sun.jna.win32.W32APIOptions; import com.sun.jna.platform.win32.WinDef; import com.sun.jna.platform.win32.WinNT; import com.sun.jna.platform.win32.WinGDI; public class JNAScreenShot { public static BufferedImage getScreenshot(Rectangle bounds) { WinDef.HDC windowDC = GDI.GetDC(USER.GetDesktopWindow()); WinDef.HBITMAP outputBitmap = GDI.CreateCompatibleBitmap(windowDC, bounds.width, bounds.height); try […]

使用JNA进行C回调会导致JRE崩溃

我在JNA中处理回调时遇到问题。 我正在尝试使用一个使用回调来处理多个会话事件的C API(登录,注销,连接问题……)。 会话对象(称为sp_session )是一个不透明的结构。 所有回调都在sp_session_callbacks结构中注册。 根据API,我应该声明回调对象,并将其放入我将在创建sp_session对象时提供的sp_session对象中。 如果我不想使用某些回调,我应该用null初始化它们。 API使用__stdcall调用约定。 这是与我的问题相关的C标题的片段: #define SP_CALLCONV __stdcall typedef struct sp_session sp_session; ///< Representation of a session typedef enum sp_error { SP_ERROR_OK = 0, SP_ERROR_BAD_API_VERSION = 1, /* More errors */ } sp_error; typedef struct sp_session_callbacks { /** * Called when login has been processed and was successful */ void […]

使用StdCallFunctionMapper在JNA中重命名DLL函数

我正在尝试在Windows中使用JNA和DLL,到目前为止我能够成功调用一个名为c_aa_find_devices()的函数。 但是所有函数都以c_aa ,我想将它重命名为find_devices() 。 从我收集的方式来看,这是使用StdCallFunctionMapper但我找不到如何在一个示例中使用它的文档(即如何通过名称或序号将DLL函数映射到包装的Java库中的所需名称接口)。 关于文档在哪里的任何建议?