我正在使用 jni4net
在java中使用dll函数。
使用jni4net-0.8.6.0-bin,我使用以下命令编译: .\proxygen.exe "D:\sampledlls\sample_interface.dll" -wd "D:\hope"
执行此命令时,出现以下错误:
System.BadImageFormatException: Could not load file or assembly 'file:///D:\sampledlls\sampledll.dll' or one of its dependencies. The module was expected to contain an assembly manifest.
我还使用jna库来使用java中的dll函数。但在这方面,我也得到了以下错误:
java.lang.UnsatisfiedLinkError: Unable to load library 'sampledll': The specified module could not be found.
以下是我的jna代码:
public class hellodll {
public interface dcmInterfaceDLL extends Library {
public void DCM_InitializeFields();
}
public static void main(String[] args) {
System.out.println(System.getProperty("java.library.path"));
System.setProperty("jna.library.path",
"C:\Users\320035705\Downloads\JNAHelloWorldMWrobel\JNAHelloWorldMWrobel\sampledlls");
dcmInterfaceDLL sdll = (dcmInterfaceDLL)
Native.loadLibrary("sample_interface", dcmInterfaceDLL.class);
System.loadLibrary("sample_interface");
sdll.DCM_InitializeFields();
}
}
这是一个native.dll。
如何加载dll?
1条答案
按热度按时间0yycz8jy1#
对于
jni4net
版本,它正确地找到了dll,但格式不正确。您可能正在使用32位jvm和64位dll,反之亦然。你可以尝试添加/32BIT+ /force
切换到proxygen
命令行。当错误消息提到其依赖项时,dll可能还有其他问题。您的注解指示与visual c++运行时包相关的错误消息。
对于jna库加载,由于反斜杠转义不当,无法找到dll。
在java(和许多其他语言)中,反斜杠(
\
)是转义字符。在字符串中使用时,它有特殊的含义,例如(\n
)换新线。在表示路径的字符串中,没有转义反斜杠,因此字符串
"C:\Users\320035705\Downloads\JNAHelloWorldMWrobel\JNAHelloWorldMWrobel\sampledlls"
最终被解释为"C:Users320035705DownloadsJNAHelloWorldMWrobelJNAHelloWorldMWrobelsampledlls"
.使用两个反斜杠(
\\
)表示java字符串中的单个反斜杠。如果您这样指定路径,它应该适用于jna:但是,如果存在dll需要另一个依赖项的问题,则可能会由于相同的原因而失败。