我有这段代码来创建一个简单的.NET .dll。它只返回一个int。
但是,它在Java内部不起作用。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ReturnINT
{
public class ReturnINT
{
public static int RetornaInteiro ()
{
try
{
int n
我必须在应用程序中查找系统信息,为此,我有两个本地库文件,如下所示:SystemManagerLinux.so和SystemManagerWin32.dll。
我必须在我的java代码中使用这些库文件来显示java GUI上的信息。我已经将这些文件放在位置:C:\Users\surjit\Documents\NetBeansProjects\SampleMonitor,并在我的netbeans ide on run选项中将其作为vm参数,如下所示:
-Djava.library.path="C:\Users\surjit\Documents\NetBeansProjects\Sampl
我正在用Java编写一个程序,它必须使用一个DLL文件(这是一个用C#编写的文件),我认为最好的方法是编写一个C++程序作为接口,然后使用JNI。C++程序将负责以JNI友好的方式使用DLL,这样我就可以从我的Java程序中调用它。
我试图在C++中包含一个DLL文件,但是我在编译时得到了以下错误。
warning C4335: Mac file format detected: please convert the source file to either DOS or UNIX format
包括上述DLL的方式:
#include "LibraryName.dll"
我
我有一个jni dll,它具有从java调用的函数。问题是这个dll在默认包中(在dll“Java_classname_methodname”中)拥有所有java类。要获得这个dll的源是不可能的,重写需要花费非常长的时间。因此,我基本上需要在一个与默认包不同的包中,从java调用这个dll中的函数。我已经尝试了几个小时,用一个十六进制编辑器和几个工具来修改dll中的校验和地址来重命名dll中的函数,但这对我来说太大了,因为我几乎没有这方面的经验。我非常喜欢这条路,但我只是没有合适的工具或诀窍。所以剩下的就是用java对包名进行硬编码。我尝试使用堆栈溢出帖子中描述的jna来执行如下操作:
Ma
我正在开发一个使用MATLAB代码进行计算的Java应用程序。但是,MATLAB代码本身使用一个DLL文件。我将所有MATLAB函数打包到一个类中,并创建了一个jar文件。
我在Java项目的项目根文件夹中添加了C头文件和DLL文件,并将包含MATLAB代码的jar添加到属性中。但是,当我调用这些方法时,它似乎正在执行,但它无法加载DLL文件。
下面是我得到的错误消息:
{??? Error using ==> loadlibrary at 477
There was an error loading the library
**"C:\Users\AUG\Documents\B
在我的Windows机器上使用Windows时,在调用com.sun.tools.attach时会出现以下错误
VirtualMachine.list()
java.lang.UnsatisfiedLinkError: no附加在java.library.path中
原因是缺少了attach.dll。attach.dll位于$JRE/bin/。当用-Djava.library.path=[Directory to the attach.dll]启动我的Java程序时,所有工作都没有错误输出。
现在,我不想添加每个Java程序启动这个丑陋的JVM参数。因此,我的问题是:
是我的机器配置不正确,而
因此,根据我的评论员的要求,我终于找到了一个MCVE,它复制了我的错误。因此,一般的设置是,Java使用JNI调用dll,dll抓住正在运行的JVM并存储指向JNIEnv的指针,该指针用于在java类中调用方法(从c++调用的java类不一定是原始调用的java对象,这就是为什么输入jobject不用于回调)。在我进一步解释之前,让我发布所有代码:
JniTest.java
package jnitest;
public class JniTestJava {
public static void main(String[] args) {
try {
System
我将需要使用一个外部的,未知的DLL并围绕它构建一个java包装器。我目前没有DLL或头文件,甚至可能不会得到头文件,但我想自己做好准备。(我对C++没有经验)
以下情况:
假设这个DLL有一个函数,它包含一个或多个C++类作为方法签名。那么我如何使用JNI调用这个函数,就像在我的java项目中,DLL中的那些自定义类是不存在的?是否有将C++类“克隆”或“端口”到java的选项?我能用像Dependency这样的工具来解决这个问题吗?
实现这一目标的最佳/最简单方法是什么?
下面是一些我已经尝试过的代码,以了解它的行为:
带有主的Java类
public class FourthJNI {
任务是从现有的dll调用方法。我正尝试在kernel32.dll中的一个CopyFileA示例中做到这一点。
方法签名为:
Function long CopyFileA(String lpExistingFileName, String lpNewFileName, boolean bFailifExists) Library "kernel32"
这就是我在java中尝试这样做的方法:
public class Test {
static {
System.loadLibrary("D:\\test\\kernel32");
我想使用epanet.dll,所以为了调用它,我必须创建我的桥dll。
我创建了Java类
public class Epanet {
//Native method declaration
native int ENopen(String fileInput, String fileOutput, String optBinFileOut);
native int ENsaveinpfile(String file);
native int ENclose();
native int ENsolveH();
native int ENsaveH
我用创建了一个VB.net DLL非常简单,这是我的代码:
Public Class Class1
Public Function SayHello() As String
Return "Hello"
End Function
End Class
我想将这个来自JAVA的DLL与JNA一起使用,但是Eclipse说我比我的DLL中不存在"SayHello“这个过程。
当我使用像"Dependency“这样的工具时,我的函数是不可见的。
所以我的问题是:如何使这个函数可调用并可见??
谢谢。文森特。