2013-03-13 1811 views
3

我正在尝试使用visual studio创建一个dll文件,并在Java项目中使用/访问它。该库似乎被加载,但总是抛出相同的异常: 线程“main”中的异常java.lang.UnsatisfiedLinkError:查找函数'function'时出错:无法找到指定的过程。我的C/C++技能并不是最好的,所以问题可能在那里。我试图编辑h和cpp文件,使用类,名称空间,静态方法和网上找到的其他工作人员,但没有做任何事情。 我也看过其他文章谈论Depency Walker工具,但它无法打开我的dll,我也看到编译器为函数名添加了一些奇怪的后缀,因为我知道可以通过使用“ estern'C'“在h或cpp文件中,但我无法使用。Java + JNA:找不到指定的程序

我的界面:

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

你有没有尝试声明你的函数为extern“C”静态void函数();在命名空间simpleDll之外? – 2013-03-13 23:36:22

+0

是的,我也试过没有命名空间。我想在Visual Studio中有一个设置问题,因为我发现我创建的库是空的。我发现另一个工具来打开DLL,而令人惊讶的是,里面没有函数。 – Emaborsa 2013-03-14 07:44:24

回答

6
  1. 确保在simpleDll名称空间外声明您的函数。
  2. 确保装饰它瓦特/ extern "C"
  3. 确保暴露你的功能__declspec(dllexport) void __cdecl function();或使用module definition file
+0

非常感谢!它的工作原理:) – Emaborsa 2013-03-14 19:24:21

+0

谢谢你,你是最好的!!!!!!!!!!!!!!!!!!!!!!!!! – Thomas 2013-09-26 16:09:37