【发布时间】:2014-05-06 21:52:16
【问题描述】:
我不熟悉使用 JNA 从 Java 访问 DLL。我需要从 DLL 中的类访问方法(用 .net 编写)。形成下面的这个示例 DLL,我正在尝试获取 AuditID 和服务器 ID。我在运行代码时以以下错误结束。非常感谢任何指导。
/// 错误 ///
Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'GetEnrollcontext': The specified procedure could not be found.
//DLL文件代码//
SampleDLL.ProfileEnroll enrollcontext = new SampleDLL.ProfileEnroll();
enrollcontext.Url =” url”;
enrollcontext.AuditIdType = SampleDLL.ProfileId;
enrollcontext.AuditId = “22222222 “;
enrollcontext.ServerId = “server1”;
/// Java 代码 ///
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Structure;
import dllExtract.DLLExtractTest.SampleDLL.Enrollcontext;
public class SampleDLLExtract {
public interface SampleDLL extends Library {
SampleDLL INSTANCE = (SampleDLL) Native.loadLibrary("SampleDLL",
SampleDLL.class);
public static class Enrollcontext extends Structure {
public String auditId;
public String serverId;
}
void GetEnrollcontext(Enrollcontext ec); // void ();
}
public static void main(String[] args) {
SampleDLL sdll = SampleDLL.INSTANCE;
SampleDLL.Enrollcontext enrollContext = new SampleDLL.Enrollcontext();
sdll.GetEnrollcontext(enrollContext);
System.out.println(sdll.toString(sdll.GetEnrollcontext(enrollContext)));
}
}
【问题讨论】:
-
经过大量研究,确认无法使用JNA框架调用VB或C Sharp编写的DLL文件。 JNA 正在使用系统 DLL,但不适用于第三方 DLL。