我想使用C# dll函数。
C#
using RGiesecke.DllExport;
namespace dllExample
{
public class DllExample
{
[RGiesecke.DllExport.DllExport]
public static string Test(string id)
{
return "done" + id;
}
}
}
.java
@Test
public void jnaTest() {
DllExample dllExample = Native.loadLibrary("c:\Users\IEUser\RiderProjects\dllExample\dllExample\bin\Release\RGiesecke.DllExport.Metadata.dll", DllExample.class);
Assert.assertEquals("doneabc", dllExample.Test("abc"));
}
public interface DllExample extends Library{
String Test(String id);
}
我用Visual Studio构建了c#项目,它将3个文件放入项目bin\release目录中:
- dll示例.dll
- dll示例.pdb
- RGiesecke.DllExport.Metadata.dll
JDK 版本:1.8.171
jna: net.java.dev.jna:jna:4.5.1
运行测试时,我收到以下异常:
java.lang.UnsatisfiedLinkError: 查找函数"Test"时出错:A megadott eljárás nem található.
at com.sun.jna.Function.(功能.java:245( 在 com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:566( at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:542( at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:528( at com.sun.jna.Library$Handler.invoke(Library.java:228( at com.sun.proxy.$Proxy 5.Test(未知来源( at hu.kdiv.keaesz.sign.DirectMSCAPITest.jnaTest(DirectMSCAPITest.java:149(
我错过了什么? 我正在使用Visual Studio Build Solution功能构建dll。
我是UnmanagedExpirt NuGet包。这不好。
溶液:
删除非托管导出并使用 DllExport NuGet 包。描述如下: https://github.com/3F/DllExport