【问题标题】:call Windows Color System from Java从 Java 调用 Windows 颜色系统
【发布时间】:2014-07-19 14:50:57
【问题描述】:

我需要从 Java 调用 Windows 颜色系统函数。在this tutorial 之后,我尝试使用 Java Native Access 调用 DLL 函数。本教程中的所有示例都可以正常工作。当我尝试加载和使用 Mscms.dll(WCS 库之一)时,DLL 似乎已成功加载,但我无法调用任何函数。函数列表为here

我收到一条消息:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'GetColorDirectory'

我的代码有什么问题?你能帮帮我吗?

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

public class WCS_test {

public interface Mscms extends Library {
    // http://msdn.microsoft.com/en-us/library/dd316928%28v=vs.85%29.aspx
    boolean GetColorDirectory(String pMachineName, String[] pBuffer, int pdwSize);
}

private static Mscms mscms = (Mscms) Native.loadLibrary("C:/Windows/system32/Mscms.dll", Mscms.class);

public static void main(String[] args) {

    if (mscms != null)
        System.out.println("Library loaded\n");
    else
        System.err.println("Library loading error\n");

    String[] pBuffer = new String[1024];
    mscms.GetColorDirectory(null, pBuffer, pBuffer.length);
}
}

【问题讨论】:

    标签: java windows colors system call


    【解决方案1】:

    当您收到 java.lang.UnsatisfiedLinkError 时,这意味着它无法在 Mscms.dll 中找到函数“GetColorDirectory”。查看源代码 http://msdn.microsoft.com/en-us/library/dd316928%28v=vs.85%29.aspx 中的链接,您应该尝试使用 Unicode 名称 GetColorDirectoryW。

    【讨论】:

    • 你是对的。我错过了那个信息。现在错误信息更改为“无效的内存访问”,所以找到了函数,但我的调用参数错误。我会努力的。我尝试了另一个参数更简单的函数(CMGetInfo),它可以工作。非常感谢!
    猜你喜欢
    • 2011-12-25
    • 2011-07-02
    • 2012-09-17
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多