2
我有一个C#类,其中一个方法编译为本机代码,我想使用JNA从Java方法调用。该类被封装为一个名为DataGrabber.dll的文件。 这是C#代码:使用JNA访问编译为Java本地代码的C#方法
namespace GrabberLibrary {
public class Grabber {
public void GetData(String projectId, String importURI){
//implementation code
}
}
}
我已经实现了接口的建议:
import com.sun.jna.Library;
import com.sun.jna.Native;
public interface Grabber extends Library{
Grabber INSTANCE = (Grabber)Native.loadLibrary("Grabber", Grabber.class);
void GetData(String projectId, String importURI);
}
,然后当我在Java中调用这个GetData方法从主要的方法是这样的:
System.setProperty("jna.library.path", "C:\\dlls");
Grabber sgl = Grabber.INSTANCE;
sgl.GetData("123", "http://localhost/test");
我得到以下异常:
java.lang.UnsatisfiedLinkError: Unable to load library 'Grabber': The specified module could not be found.
在另一方面,如果我把它作为命名空间中的C#代码(DataGrabber)定义我得到相同的DLL名称:
java.lang.UnsatisfiedLinkError: Error looking up function 'GetData': The specified procedure could not be found.
我如何可以调用GetData方法?
你用什么编译器来实现这个?据我所知,C#编译器将不会编译为本机代码。 – GeirGrusom
.Net Reactor(http://www.eziriz.com/dotnet_reactor.htm) – Neman
我对编译器的工作原理知之甚少,但试试这个: - 将函数标记为静态 - 检查如何执行DLL导出.NET Reactor - 使用Dependancy Walker查看输出 – GeirGrusom