我试图开发一个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.jna.nativelibrary.getfunction(nativelibrary.java:562),在com.sun.jna.nativelibrary.java:562),在
查看我的cpp*.h文件:
#ifdef __cplusplus
extern "C" {
#endif
typedef struct s_mine
{
e_color color; //e_color is enum type made of int values
his data;
int str;
unsigned int wild;
unsigned int hello;
float rice;
} mine;
typedef struct s_his
{
unsigned char * data;
unsigned int size;
} his;
// compute function which raised the exception
int compute(const his* const input, void ** outputPointer);
// treat function raised also the same exception
int treat(const mine* inputParameter, mine* outputParameter);
#ifdef __cplusplus
}
#endif
请参见下面我的JNA包装器:
public interface MyInterface extends Library {
@FieldOrder({"data", "size"})
public static class his extends Structure {
public static class ByReference extends his implements Structure.ByReference {}
public static class ByValue extends rt_buffer implements Structure.ByValue {}
public Pointer data;
public int size;
}
@FieldOrder({"color","data","str","wild","hello","rice"})
public class mine extends Structure {
public static class ByReference extends mine implements Structure.ByReference {}
public int color;
public his data;
public int str;
public int wild;
public int hello;
public float rice;
}
public int compute(his input, Pointer[] outputPointer);
public int treat(mine inputParameter, mine outputParameter);
}
因此,在我的测试类中,我设置:
// COMPUTE
MyInterface.his.ByReference input_ref = new MyInterface.his.ByReference();
ByteBuffer init_buffer;
// init_buffer is initialized with some not null values
Pointer init_p = Native.getDirectBufferPointer(init_buffer);
input_ref.data = init_p;
input_ref.size = init_buffer.capacity();
Pointer[] outputPointer = null;
int resultCompute = compute(input_ref, outputPointer);
// TREAT
MyInterface.mine.ByReference inputParameter_ref = new MyInterface.mine.ByReference();
MyInterface.his.ByValue buffer = new MyInterface.his.ByValue();
// initialize buffer with an input buffer value different from null value
// Set other fields of inputParameter_ref with none null values
inputParameter_ref.data = buffer;
MyInterface.mine.ByReference outputParameter_ref = null;
int resultTreat = treat(inputParameter_ref, outputParameter_ref);
因此,我感觉引发的异常不是来自我的实现,而是来自DLL。但我没有任何线索来解释为什么关于我的断言在我的帖子开始。
>
除了装饰和外部声明问题,还有其他原因吗?
因此,我在jna包装器中有:
公共int计算(他的输入,指针[]outputPointer);
公共int管理(指针inputPointer);
在我的测试类中,我有:
在我的测试类中,我有:
PointerByReference outputPointer=null;
int resultCompute=myinterface.compute(input_ref,outputPointer);
上面的sysout显示被调用的当前方法的名称,即显示method names=compute
。调试代码时,我注意到它们是方法名称上的一个问题。但是由于sysout显示了我在jna包装器中声明的方法的名称,所以没有帮助。我刚刚用一个C++dll中没有定义的假方法执行了一个快速测试,我遇到了同样的错误:找不到过程。因此,我真的认为dll有一个问题,但我不知道如何找到它...
最后,我不得不在调用包装器的java测试主类中添加以下一行来解决我的问题:System.SetProperty(“jna.library.path”,“C:\mywrapper\src\main\resources);其中C:\mywrapper\src\main\resources是存储dll文件的文件夹。
但是它没有解释为什么我不需要为存储在同一个文件夹中的其他dll设置这一行,因为我也在环境变量中声明了jna.library.path。
问题内容: 我正在用C ++编写一些JNI代码,以便从Windows XP的applet中调用。我已经能够成功运行applet并加载和调用JNI库,甚至可以在其他DLL中调用它。我通过设置PATH系统环境变量来使其工作,以包括所有DLL所在的目录。 因此,问题在于,我添加了另一个使用新的外部DLL的调用,并且突然在加载库时引发UnsatisfiedLinkError。消息为:“找不到指定的过程”。
我试图打印TSC-244 Pro条形码标签打印机从GWT网络应用程序。他们给出tsclib.dll。因此,我使用jna.jar并将tsclib.dll文件复制到C:\windows和[my_project_dir]\war\WEB-INF\lib。它的工作,但当我部署到apache Tomcat。它不工作,我有以下错误。请给我解决办法。谢谢。 严重:分派传入的RPC调用com.google.gwt
我正在尝试使用可视化工作室创建一个dll文件,并在java项目中使用/访问它。库似乎被加载了,但总是抛出相同的异常:线程“主”java.lang.中的异常不满意链接错误:查找函数“函数”时出错:找不到指定的过程。我的C / C技能不是最好的,所以问题可能就在那里。我试图编辑h和cpp文件,使用类,命名空间,静态方法和在网络上找到的其他人员,但无所事事。我也看到其他帖子谈论Depency Walke
使用OracleDB时出错,错误为“找不到指定的过程”。节点安装OracleDB正常。为构建而执行的步骤如下 已安装Visual Studio 2017 Visual C 14.0 使用/app.js内容运行代码时出错 使用strongloop/loopback CLI时出现相同错误。任何指示都会有帮助
问题内容: 有一块代码可以在android 4.1.2上正常工作,但在4.0.3上却不能正常工作,崩溃日志为4.0.3 我收到UnsatisfiedLinkError异常 请指导我谢谢 这是我的课 这是我从中编译并创建二进制“ libsqliteX.so”文件的源cpp文件http://www.sqlite.org/android/tree?ci=trunk&re=jni|src/org/sqli
问题内容: 我已经开始使用Python处理图片,并且想开始使用PIL(枕头)。要安装它,我跑了。安装时,以前未安装PIL。我还尝试卸载并重新安装它,以及使用。 当我在Python中运行它时,第一行是: 我检查了目录,并且PIL文件夹下存在文件_imaging.cp36-win_amd64.pyd。 如果存在所需的DLL,为什么会发生这种情况?我该如何解决? 问题答案: 我在Python 3.6中也