建立dll動態連結程式庫,並使用java調用

來源:互聯網
上載者:User

標籤:htm   通過   建立   thread   nbsp   網路遊戲   workspace   依賴   應用程式更新   

參考文章:http://www.cnblogs.com/matthew-2013/p/3480296.html

              http://blog.csdn.net/g710710/article/details/7255744

 

首先探討何為動態連結程式庫,按照百毒百科的解釋:

【動態連結程式庫(Dynamic Link Library 或者 Dynamic-link Library,縮寫為 DLL),是微軟公司在微軟Windows作業系統中,實現共用函數庫概念的一種方式。這些庫函數的副檔名是 ”.dll"、".ocx"(包含ActiveX控制的庫)或者 ".drv"(舊式的系統驅動程式)。動態連結提供了一種方法,使進程可以調用不屬於其可執行代碼的函數。函數的可執行代碼位於一個 DLL 檔案中,該 DLL 包含一個或多個已被編譯、連結並與使用它們的進程分開儲存的函數。DLL 還有助於共用資料和資源。多個應用程式可同時訪問記憶體中單個 DLL 副本的內容。使用動態連結程式庫可以更為容易地將更新應用於各個模組,而不會影響該程式的其他部分。例如,您有一個大型網路遊戲,如果把整個數百MB甚至數GB的遊戲的代碼都放在一個應用程式裡,日後的修改工作將會十分費時,而如果把不同功能的代碼分別放在數個動態連結程式庫中,您無需重建或安裝整個程式就可以應用程式更新。】

 

vs2012建立項目,win32 - win32項目,名稱MyDLL。應用程式設定,選擇DLL選項。

建立標頭檔testdll.h

#ifndef TestDll_H_#define TestDll_H_#ifdef MYLIBDLL#define MYLIBDLL extern "C" _declspec(dllimport) #else#define MYLIBDLL extern "C" _declspec(dllexport) #endifMYLIBDLL int Add(int plus1, int plus2);//You can also write like this://extern "C" {//_declspec(dllexport) int Add(int plus1, int plus2);//};#endif

建立cpp testdll.cpp

#include "stdafx.h"#include "testdll.h"#include <iostream>using namespace std;int Add(int plus1, int plus2){    int add_result = plus1 + plus2;    return add_result;}

在源檔案目錄下建立mydll.def

LIBRARY "MyDLL"EXPORTSAdd @1

dllmain.cpp是自動建立的,定義了dll應用程式的入口

// dllmain.cpp : 定義 DLL 應用程式的進入點。#include "stdafx.h"BOOL APIENTRY DllMain( HMODULE hModule,                       DWORD  ul_reason_for_call,                       LPVOID lpReserved                     ){    switch (ul_reason_for_call)    {    case DLL_PROCESS_ATTACH:    case DLL_THREAD_ATTACH:    case DLL_THREAD_DETACH:    case DLL_PROCESS_DETACH:        break;    }    return TRUE;}

之後,編譯,產生。

在workspace的MyDLL\Debug目錄即可找到生產的MyDLL.dll。

將該dll檔案放到jdk的bin目錄下。

開啟eclipse,隨意建立個項目。testdll

加入依賴的jna的jna-4.2.2.jar包。

 

 寫代碼:

package testdll;import com.sun.jna.Native;import com.sun.jna.win32.StdCallLibrary;/** * @author sonne */public class JNA {    public interface CLibrary extends StdCallLibrary {        CLibrary INSTANCE = (CLibrary) Native.loadLibrary("MyDLL.dll", CLibrary.class);        int Add(int plus1, int plus2);    }    public static void main(String[] args) {        int result = CLibrary.INSTANCE.Add(1,2);        System.out.println("結果為" + result);    }}

這裡需要定義java介面,該介面中方法與dll庫函數方法一致,通過jna來調用這個介面實際上就是調用dll動態連結程式庫。運行結果為,3。

可知是調用了dll的Add方法。求得1+2=3.

 

建立dll動態連結程式庫,並使用java調用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.