2011-11-28 53 views
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方法?

+2

你用什麼編譯器來實現這個?據我所知,C#編譯器將不會編譯爲本機代碼。 – GeirGrusom

+0

.Net Reactor(http://www.eziriz.com/dotnet_reactor.htm) – Neman

+0

我對編譯器的工作原理知之甚少,但試試這個: - 將函數標記爲靜態 - 檢查如何執行DLL導出.NET Reactor - 使用Dependancy Walker查看輸出 – GeirGrusom

回答