当前位置: 首页 > 知识库问答 >
问题:

Java JNA : 找不到指定的过程

杜元明
2023-03-14

我正在尝试使用可视化工作室创建一个dll文件,并在java项目中使用/访问它。库似乎被加载了,但总是抛出相同的异常:线程“主”java.lang.中的异常不满意链接错误:查找函数“函数”时出错:找不到指定的过程。我的C / C技能不是最好的,所以问题可能就在那里。我试图编辑h和cpp文件,使用类,命名空间,静态方法和在网络上找到的其他人员,但无所事事。我也看到其他帖子谈论Depency Walker工具,但它无法打开我的dll,我还看到编译器在函数名称中添加了一些奇怪的后缀,因为我理解可以通过在h或cpp文件中使用“estern 'C'”来避免它,但我无法做到。

我的界面:

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

public interface SimpleDll extends Library {

    SimpleDll instance = (SimpleDll) Native.loadLibrary("SimpleDll", SimpleDll.class);

    void function();


}

我的主要班级:

public class Test_Dll {

    public static void main(String[] args) {
        SimpleDll simpleDll = SimpleDll.instance;

        simpleDll.function();
    }
}

我的h文件:

#ifndef SIMPLEDLL
#define SIMPLEDLL

namespace simpeDll{


    static void function();


}
#endif

我的 cpp 文件:

#include "stdafx.h"
#include "simpleDll.h"
#include <stdexcept>

using namespace simpeDll;

static void function(){

}

共有1个答案

燕智
2023-03-14
  1. 确保在<code>simpleDll</code>命名空间之外声明函数
  2. 确保用extern“C”
  3. 装饰它
  4. 确保公开您的函数<code>__declspec(dllexport)void __cdecl function()或使用模块定义文件
 类似资料:
  • 问题内容: 我正在用C ++编写一些JNI代码,以便从Windows XP的applet中调用。我已经能够成功运行applet并加载和调用JNI库,甚至可以在其他DLL中调用它。我通过设置PATH系统环境变量来使其工作,以包括所有DLL所在的目录。 因此,问题在于,我添加了另一个使用新的外部DLL的调用,并且突然在加载库时引发UnsatisfiedLinkError。消息为:“找不到指定的过程”。

  • 我试图开发一个C++DLL的JNA包装器。 在com.sun.jna.function.(function.java:252),在com.sun.jna.nativelibrary.getfunction(nativelibrary.java:600),在com.sun.jna.nativelibrary.getfunction(nativelibrary.java:576),在com.sun.j

  • 使用OracleDB时出错,错误为“找不到指定的过程”。节点安装OracleDB正常。为构建而执行的步骤如下 已安装Visual Studio 2017 Visual C 14.0 使用/app.js内容运行代码时出错 使用strongloop/loopback CLI时出现相同错误。任何指示都会有帮助

  • 问题内容: 我已经开始使用Python处理图片,并且想开始使用PIL(枕头)。要安装它,我跑了。安装时,以前未安装PIL。我还尝试卸载并重新安装它,以及使用。 当我在Python中运行它时,第一行是: 我检查了目录,并且PIL文件夹下存在文件_imaging.cp36-win_amd64.pyd。 如果存在所需的DLL,为什么会发生这种情况?我该如何解决? 问题答案: 我在Python 3.6中也

  • 我需要通过使用jna在java代码中使用RegLoadKey函数,但我得到以下错误消息: 线程“main”java.lang.UnsatifiedLinkError中出现异常:查找函数“regloadKey”时出错:找不到指定的过程。块引号 我认为我的代码有几个问题。我对windows api和JNA是新手。

  • 我正在尝试访问一个在java代码中创建的VB.NET dll方法。我试图使用JNA来实现这一点。 这是我的Java代码。 java(调用dll方法) dll中的方法名和hello.java中的方法名没有区别。 有趣的是,我试图测试windows dll msvcrt.dll的puts()方法的代码,它工作得非常好。所以问题就在于点网DLL。请救命!