Tag: jna

Java(JNA) – 在DLL(C ++)库中找不到函数

我是Java新手,在google和stackoverflow中搜索了这个问题,发现了一些post,但我仍然无法理解。 我想使用Java中的DLL库(C ++)方法。 我为此目的使用JNA。 JNA找到了我的库,但找不到我的方法: Exception in thread “main” java.lang.UnsatisfiedLinkError: Error looking up function ‘LoadCurrentData’: The specified procedure could not be found. 我的代码: package javaapplication1; import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Platform; import com.sun.jna.Pointer; public class JavaApplication1 { public interface LibPro extends Library { LibPro INSTANCE = (LibPro) Native.loadLibrary( (Platform.isWindows() ? “LibPro” : “LibProLinuxPort”), LibPro.class); public […]

PointerByReference没有返回值

我试图通过JNA从Java调用C ++函数。 我想传入一个字符串,并返回一个字符串。 这是通过使用in参数和out参数完成的。 我使用PointerByReference来表示char** out参数。 对C ++的调用有效,但调用后PointerByReference为null。 我将我的代码基于PointerByReference文档。 我有什么想法我做错了吗? 我已经在C ++中添加了print语句,以确保它不是将指针设置为null,而且绝对不是。 所以我使用JNA的一些必定是错误的。 但是什么? C ++代码 void processRequest(char* input, char** output, int* outputLength) { // Variable output size from processInput std::string sOutput = processInput(input); char* results = new char[sOutput.length() + 1]; strncpy(results, sOutput.c_str(), sOutput.length()); results[sOutput.length()] = ‘\0’; output = &results; outputLength = new int(strlen(results) + […]

指向结构数组的指针作为JNA方法参数

我试图通过SctpDrv库创建一个JNA实现。 我的问题是我没有理解指向结构数组的指针。 我试图寻找解决方案,但它们总是与我需要知道的略有不同。 JNA dokumentation仅显示一个带有指向基本类型数组的指针的示例。 似乎还有不同的方法,其中一些是被贬低的。 int WSAAPI internal_sctp_getpaddrs (SOCKET, sctp_assoc_t, struct sockaddr **); void WSAAPI internal_sctp_freepaddrs (struct sockaddr *); 根据文档,getpaddrs的第三个参数用于返回一个sockaddr结构数组。 声明相应的JNA方法的推荐方法是什么,如何准备参数,以及在我的java代码中调用之后访问它? 另外,为了帮助我理解,我将如何声明和使用一个函数,而参数是一个包含指针的数组?

jna getDesktop带来了WindToTop

我在激活桌面窗口时遇到问题。 我采取了以下方法 1:GetDesktopWindow检索桌面的句柄(这个工作)我已经尝试了以下方法将桌面窗口置于顶部,但它们不起作用。 SetForegroundWindow SwitchToThisWindow ShowWindow BringWindowToTop 有什么我做错了吗? 或者不可能用jna显示桌面?

JNA Struct和指针映射

如何将下面的函数映射到java? VOID WriteToStruct(BOOL *状态,STRUCT_MSG RecBuff) 这个function的作用: 1)填充结构RecBuff 2)更新状态 如何映射到Java中的布尔指针并访问由函数更新的结构数据?

通过JNA调用GetOpenFileName对于Swing应用程序失败

我正在尝试使用Java中的本机Windows文件对话框,使用JNA调用comdlg32函数GetOpenFileName 。 我做了一个静态方法, OpenFileDialog.display看起来像这样: public static List display(Window parent, boolean allowMultiSelect) 它应该返回所选文件,如果用户取消了对话框,则返回null。 我有两个简单的测试程序。 这个按预期工作: package nativedialogs; import java.io.File; import java.util.List; public class SimpleTest { public static void main(String[] args) { List files = OpenFileDialog.display(null, true); System.out.println(files); } } 但是,这个不是: package nativedialogs; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.List; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.SwingUtilities; […]

从OS获取事件

我在Windows上工作,但我被困在Mac上。 我有Canon SDK,并在它上面构建了一个JNA包装器。 它适用于Windows,需要一些Mac帮助。 在sdk中,有一个函数可以注册回调函数。 基本上当相机发生事件时,它会调用回调函数。 在Windows上,注册后,我需要使用User32来获取事件并通过以下方式调度事件: private static final User32 lib = User32.INSTANCE; boolean hasMessage = lib.PeekMessage( msg, null, 0, 0, 1 ); // peek and remove if( hasMessage ){ lib.TranslateMessage( msg ); lib.DispatchMessage( msg ); //message gets dispatched and hence the callback function is called } 在api中,我在Mac中找不到类似的类。 我怎么去这个? PS:unix的JNA api非常广泛,我无法弄清楚要寻找什么。 参考可能会有所帮助

GetWindowTextA,GetWindowText在Edit Control上返回空值

我试图在C ++ / Java中从外部窗口列出并获取编辑控件的内容,遗憾的是没有成功。 当我调用GetWindowText或GetWindowTextA时,它会在Edit Controls上返回一个空值,我知道GetWindowText / GetWindowTextW和GetWindowTextA之间存在一些差异,但我不知道我做错了什么因为它适用于所有其他控件。 这里的C ++代码: BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam) { cout <<"———-CHILD————"<<endl; char class_name[80]; char title[80]; GetClassName(hwnd,class_name, sizeof(class_name)); GetWindowText(hwnd,title,sizeof(title)); cout <<"\tWindow title: "<<title<<endl; cout <<"\tClass name: "<<class_name<<endl<<endl; return TRUE; } Java代码: User32.INSTANCE.EnumChildWindows(hWnd, new User32.WNDENUMPROC() { @Override public boolean callback(Pointer hWnd, Pointer arg) { byte[] windowClassx = new byte[512]; […]

如何使用JNA迭代窗口元素?

使用JNA,我的最终目标是阅读使用Windows NET SEND或MSG.EXE发送的消息,该消息在接收计算机上显示为Windows弹出消息窗口。 我已经能够搜索这个特定的消息窗口并使用下面的代码获取hWnd句柄。 我现在的问题是如何遍历此窗口的所有元素以查找实际的消息文本,阅读消息,还单击确定按钮? 我的研究告诉我,我需要使用FindWindowEx(通过元素)和PostMessage(单击确定按钮)但我正在努力使其工作。 package democode; import com.sun.jna.Pointer; import com.sun.jna.Native; import com.sun.jna.win32.StdCallLibrary; public class JNA_Main { // Equivalent JNA mappings public interface User32 extends StdCallLibrary { User32 INSTANCE = (User32) Native.loadLibrary(“user32”, User32.class); interface WNDENUMPROC extends StdCallCallback { boolean callback(Pointer hWnd, Pointer arg); } boolean EnumWindows(WNDENUMPROC lpEnumFunc, Pointer arg); boolean PostMessage(Pointer hwndParent, String msg, […]

听Java中的系统鼠标点击

我的主要目标是计算特定应用程序上的鼠标点击次数。 想象一下,我在PC上打开了Microsoft Word和Web浏览器。 我的Java代码应该告诉我多少次点击Word和Web浏览器。 我需要应用程序名称和点击次数。 我怎样才能做到这一点? 任何解决方案都必须适用于MAC,Linux和Windows。