2

我目前正在努力MessageBoxW在 Java 中使用该函数。我成功地调用了 user32 库并使用了该MessageBoxA函数。下面是我的代码:

package messagebox;

import com.sun.jna.Library;
import com.sun.jna.Native;

public class MessageBox 
{
    public interface user32 extends Library
    {
        public int MessageBoxA(int something, String text, String caption, int flags);
    }

    public static void main(String[] args) 
    {
        System.out.println("Program starting... Library loading... ");
        user32 lib = (user32) Native.loadLibrary("user32", user32.class);
        System.out.println("Presenting Message Box ...");
        lib.MessageBoxA(0,"MessageBox success!!!","Attention",0);
    }
}

我环顾四周,找不到任何确凿的答案,但有些事情告诉我,我需要更复杂的编码来解决这个问题。对此的任何帮助将不胜感激。

4

1 回答 1

3

查看文档(确认我的怀疑)。默认情况下具有 16 位字符的 Java 字符串被转换为 8 位字符串,因此它们适合 Cchar*类型。

但是如果你真的想在 C 端打印宽(16 位)字符会发生什么?通过转换 java 字符串获得的 ascii 值被解释为 unicode 值,因此它们与您键入的内容不匹配。

文档提到使用WString类型来避免转换为 ascii。

您应该将方法签名更改为:

int MessageBoxW(int something, WString text, WString caption, int flags);

然后调用它:

lib.MessageBoxW(0, new WString("MessageBox success!!!"), new WString("Attention"), 0);

用 jna-4.2.2 测试

于 2016-05-03T12:04:13.193 回答