【问题标题】:How to use a dll file in java code using JNA?如何使用 JNA 在 java 代码中使用 dll 文件?
【发布时间】:2014-11-11 10:29:55
【问题描述】:

我必须在我的 java 代码中使用一个 dll 文件(c 代码),为此我搜索了 allot,发现 JNA 是最适合它的方式。因此,我正在尝试使用 jna-4.1.0.jar 编写一个 HelloWorld 程序。下面是c代码:

//C hello world example
#include <stdio.h>

void __declspec(dllexport) _stdcall helloFromC()
{
  printf("Hello world from the c code! \n");
}

我在 cmd 上使用以下命令为此 c 代码制作 dll:

gcc -c ctest.c
gcc -shared -0 test.dll ctest.o

运行这些命令会给我一个 c 代码的 dll,我将它放在我的简单 java 项目的根目录中。

现在这是我的 java 类:

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

public class HelloWorld {

public interface CTest extends Library {
    void helloFromC();
}

 public static void main(String[] args) {
        CTest INSTANCE = (CTest) Native.loadLibrary("ctest", CTest.class);

        INSTANCE.helloFromC();
    }
}

现在当我在 eclipse 上运行这个 java 程序时,我得到了这个错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: %1 is not a valid Win32 application.

请帮我解决这个问题,因为它已经花费了很多时间!

【问题讨论】:

  • 不,我的意思是 JNA,使用 jna-4.1.0.jar
  • 您使用什么平台/操作系统?创建 dll 并运行 java ?
  • 它是 Windows 8.1(64 位)并使用 eclipse for java
  • 所以你在windows 8.1上使用这个命令gcc -shared -0 test.dll ctest.o
  • 不,对不起上面的错误,实际在这里:gcc -shared -o test.dll ctest.o

标签: java c eclipse exception dll


【解决方案1】:
gcc -c ctest.c
gcc -shared -o test.dll ctest.o
try     'o'  ^  not '0'

它正在寻找你的 dll,但它不喜欢它。

【讨论】:

  • 是的,我已经输入了o(不是0),但我不知道为什么它不接受我的dll? :(
  • 这听起来绝对像是 windows 无法加载的东西。也许安装另一个 64 编译器并尝试一下。
  • 我应该安装 Netbeans 64 位吗?
  • 不,我认为您的 java 应用程序很好。专注于构建您的 .dll
  • 是的,终于完成了,这是我遵循的步骤(可能对其他人有帮助) 1. 下载 MinGW 64 位并打开其批处理文件。 2.然后在这里编译c代码并生成一个64位的dll文件:)这工作:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多