2012-08-03 51 views
2

花了很多時間學習了Python以通過Jython將一系列基於DLL的函數實現爲Java - 我忘了閱讀Jython的文檔,並且缺少ctypes支持渲染我的大部分代碼無用。我該如何使用JNA中沒有接口的DLL

我不想使用它的HLLAPI使用JNI

我試圖從pcshll32.dll進入某些功能,從個人通信。

我確實設法使它與Python一起工作,幾乎沒有問題,在網上很容易找到大量文檔和食譜。

現在我偶然發現了JNA,而且我遇到了很多麻煩。我幾乎無法找到關於它的信息,特別是當我試圖訪問非標準的DLL時。

根據我的理解,我需要寫一個pcshll32.class作爲接口 - 非常像User32.class,它似乎是一個接口(或者我應該稱之爲代理...)User32 .dll文件。

嗯,這就是我認爲它發生在閱讀this後。

所以...我怎樣才能導入一個外部DLL?可能嗎?我需要編寫接口/代理嗎?那裏有樣品嗎?

回答

2

你應該做的是這樣的:

public interface PcShll32 extends StdCallLibrary { //StdCallLibrary is for Windows functions 

    PcShll32 INSTANCE = (PcShll32) Native.loadLibrary(
        "pcshll32", PcShll32.class, W32APIOptions.DEFAULT_OPTIONS); //Options are for Win32API 

    // your methods 
} 

當然,你必須提供JNA這個外部庫。

對我來說,最好的解釋是the source code

+0

您也可以使用動態特性/功能在Python中自動地映射到一個給定的本地庫。請參閱https://github.com/twall/jna/blob/master/www/DynamicallyTypedLanguages.md。 – technomage 2012-08-03 16:03:02