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