首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JNA使用宏

JNA使用宏
EN

Stack Overflow用户
提问于 2011-09-21 16:10:46
回答 1查看 874关注 0票数 0

是否可以将以下宏函数映射到JNA?

代码语言:javascript
复制
int ListView_FindItem(
 HWND hwnd,
int iStart,
const LPLVFINDINFO plvfi
);

我试着用StdCallLibraryb映射这个函数,但似乎不起作用(函数找不到异常被抛出)。

基本上,我试图在桌面的列表视图中找到特定项目的索引。我有我要找的东西的名字。

编辑:我已经尝试使用发送消息功能,我得到了以下异常

代码语言:javascript
复制
Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function   
'GetMessage': The specified procedure could not be found.

at com.sun.jna.Function.<init>(Function.java:179)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:347)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:327)
at com.sun.jna.Library$Handler.invoke(Library.java:203)
at $Proxy0.GetMessage(Unknown Source)
at javaapplication4.Main.main(Main.java:43)
Java Result: 1

这是我使用的代码

代码语言:javascript
复制
public class Main {


  public static class LVFINDINFO extends Structure {
     public int    flags =1002;
     public String psz = "new folder3";
     public LPARAM  lParam ;
     public POINT   pt;
     public int    vkDirection;
}
  public static class MSG extends Structure {
    public HWND hWnd;
    public int message;
    public int  wParam =-1;
    public LVFINDINFO lParam1;
    public int time;
    public POINT pt;

    public MSG(LVFINDINFO lParam) {
        lParam1 = lParam;
    }
}

public static void main(String[] args) {
    User32 user32 = (User32) Native.loadLibrary("User32", User32.class);

    LVFINDINFO i = new LVFINDINFO();
    MSG m = new MSG(i);
    user32.GetMessage(m, user32.GetDesktopWindow(), 0, 0);

    System.out.println(user32.GetMessage(m, user32.GetDesktopWindow(), 0, 0));
}

}
EN

回答 1

Stack Overflow用户

发布于 2011-09-21 16:28:28

由于宏仅存在于编译时,因此无法使用JNA调用它。

您需要查看宏的实际功能,然后执行该操作。根据the documentation的说法,它会发送the LVM_FINDITEM message。您需要了解如何使用JNA发送该消息。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7496530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档