java中呼叫C/C++編寫的生成的動態連線庫dll檔案介面的簡單例子
1、首先用java編寫一個簡單類
public class Hello
{
public native void sayHello();
static {
System.loadLibrary("HelloDll");
}
public static void main (String[] args) {
new Hello().sayHello();
}
}
使用javac Hello.java編譯該類
再用javah Hello生成Hello.h標頭檔案
2、在Visual C++ 6.0中新建一個動態連結庫工程,工程名為HelloDll
3、在該工程中新建一個頭檔名為:hello.h,將剛才生成的Hello.h檔案中的程式碼複製進去,如下:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class Hello */ #ifndef _Included_Hello #define _Included_Hello #ifdef __cplusplus extern "C" { #endif /* * Class: Hello * Method: sayHello * Signature: ()V */ JNIEXPORT void JNICALL Java_Hello_sayHello (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
不需要做任何修改
此時新建一個Test.cpp檔案具體實現剛才的標頭檔案中的函式,程式碼如下
#include "Hello.h"
#include <jni.h>
JNIEXPORT void JNICALL Java_Hello_sayHello
(JNIEnv *, jobject){
printf("Hello world,I'm coming!");
return;
}
此時若編譯則會報錯,說找不到jni.h檔案,如下:
fatal error C1083: Cannot open include file: 'jni.h': No such file or directory
此時只需操作步驟4即可
4、在jdk的安裝目錄~\jdk1.6.0_25\include下將jni.h和~\jdk1.6.0_25\include\win32下的jni_md.h檔案複製到Visual C++ 6.0的D:\Microsoft Visual Studio\VC98\Include目錄下
5、此時在編譯連結Test.cpp檔案,即可生成動態連結庫檔案:
再將該檔案複製到與Hello.class檔案同一個目錄下,執行java檔案,即可呼叫有C/C++編寫實現的介面,即動態連結庫檔案
執行結果如下:
此即呼叫成功。
相關推薦
java中呼叫C/C++編寫的生成的動態連線庫dll檔案介面的簡單例子
1、首先用java編寫一個簡單類 public class Hello { public native void sayHello(); static { System.loadLibrary("HelloDll"); } public static void
MFC/Qt下呼叫caffe原始碼(二)---MFC下呼叫caffe的動態連線庫dll檔案
首先,先看下最後的效果吧。 win7 vs2013 新建一個MFC 工程 注:MFC中如何最簡便的方法將圖片顯示到對話方塊中?大家可以搜下,很多種方法,但是我採用的是最簡單的方法,即將opencv視窗繫結到MFC的PIcture control上。 在:
linux下gcc編譯 .c檔案生成動態連結庫 .so檔案,並測試呼叫該連結庫
簡單介紹:linux中so檔案為共享庫,和windows下dll相似;so可以共多個程序呼叫,不同程序呼叫同一個so檔案,所使用so檔案不同;so原檔案不需要main函式;例項,1.通過mysqlTest.c中的函式mysql(),生成一個libmysql.so連結庫#inc
LuaLaTeX呼叫外部Lua程式與C語言編寫的動態連結庫
在LuaLaTeX編譯方式下,雖然可以直接在tex檔案中編寫Lua程式碼,但會受到LaTeX的影響,編寫中並不是很便利。所以我在實際使用中一般都把Lua程式碼的主體部分放在LaTeX的外部,這樣可以完全按照以往的程式設計習慣去編寫。我以前所在的公司,曾經在機器人運動控制系統中使用過Lua
c編譯,呼叫動態連線庫 (.so檔案)
c編譯,呼叫動態連線庫 (.so檔案) C編譯: 動態連線庫 (.so檔案) Linux動態連結庫.so檔案的命名及用途總結 Linux程式設計練習(二)—— Linux下.so動態庫的建立和呼叫 在“紙上談兵: 演算法與資料結構”中,我在每一篇都會有一個C程式,用於實現演算法和資料
Java中呼叫sqlServer的儲存過程(CallableStatement)的幾種簡單情況
一、呼叫不帶引數的儲存過程 --建立儲存過程 create procedure testselect as begin select bno from book; end package com.nc.dao; import java.sql.*; public class test
MFC/Qt下呼叫caffe原始碼(一)---將caffe原始碼生成動態連結庫dll
本人研一,最近想將用caffe訓出的模型,通過MFC做出一個介面,扔進一張圖片,點選預測,即可呼叫預測分類函式完成測試,並且通過MessageBox彈出最終分類的資訊。 首先通過查資料總結出兩種方法,第一:直接呼叫編譯好的caffe原始碼;(本次用到的原始碼是classif
Linux下gcc編譯生成動態連結庫*.so檔案並呼叫它
動態庫*.so在linux下用c和c++程式設計時經常會碰到,最近在網站找了幾篇文章介紹動態庫的編譯和連結,總算搞懂了這個之前一直不太瞭解得東東,這裡做個筆記,也為其它正為動態庫連結庫而苦惱的兄弟們提供一點幫助。1、動態庫的編譯下面通過一個例子來介紹如何生成一個動態庫。這裡
【深度學習之Caffe】將模型測試Classification過程生成動態連結庫dll以方便其他專案呼叫
#include "caffe_classify.h" #include "head.h" Classifier::Classifier(const string& model_file,const string& trained_file,const string& mean
vs2010 C++建立和使用動態連結庫(dll)
一、用C++建立動態連結庫專案: 1、開啟Microsoft Visual Studio 2010,選擇File->New->Project。 2、在NewProject中選擇Inst
QT生成動態連結庫.so檔案
首先是新建一個工程,選擇C++庫,開啟後是這樣的: 然後輸入新建的名稱,下一步,記得勾選Qtcore那個(就是預設的那個),否則編譯似乎不能通過。因為後面自動生成的.h檔案裡還有這個。 自動生成的有4個檔案一個pro,一個cpp,一個XXX.h檔案,一個XXX_g
linux下生成動態連結庫so檔案
怎樣在linux下生成動態連結庫即.so檔案? 一、 首先需要一個好的編譯工具,直接用gcc命令列編譯已經不再是一個明智之舉了,一個好的帶編譯工具的環境是很重要的,我選擇的是easyeclipse,它集成了CDT,可以很方便地編寫C和C++程式,它自動集成了gcc編譯器
GCC編譯生成動態連結庫*.so檔案
動態庫*.so在linux下用c和c++程式設計時經常會碰到,最近在網站找了幾篇文章介紹動態庫的編譯和連結,總算搞懂了這個之前一直不太瞭解得東東,這裡做個筆記,也為其它正為動態庫連結庫而苦惱的兄弟們提供一點幫助。 1、動態庫的編譯 下面通過一個例子來介紹如何生成一個動態庫。
IDEA編輯器下 JNI Java中呼叫C\C++語言的詳細方法步驟
Mac OS 上進行github的配置 註冊GitHub賬號,直接去官網註冊即可 建立github.io 在自己的主頁,點選”New repository”,即可新建一個版本庫 安裝或更新
Android開發中在JAVA中呼叫C/C++ native程式碼
Android 從Java呼叫C/C++ 當無法用 Java 語言編寫整個應用程式時,JNI 允許您呼叫C/C++本機程式碼。在下列典型情況下,您可能決定使用本機程式碼: 希望用更低階、更快的程式語言C/C++去實現對時間有嚴格要求的程式碼。
Delphi 呼叫 c編寫的動態連結庫,結構體指標作為引數
折騰了一天終於把 結構體指標作為在delphi和c動態連結庫之間函式引數傳遞的問題徹底解決了,花了一天時間的主要原因是沒有領會引數傳遞的精髓。現在把c程式碼和delphi程式碼粘上來,以供後來者學習參考。 delphi程式程式碼: unit Unit3; interfac
java便捷呼叫現成c/c++庫: cmake使用swig簡介
簡介 swig是個工具,能便捷地讓其它指令碼語言呼叫你使用C語言編寫的程式。更具體的請自己google一下相關資料(如果沒條件上google,用一下baidu應該也能查到點東西)。 在android應用開發中,可能java要大量地呼叫一個現成的c庫的時候,可以考慮用swig轉換一下。
一篇好文之Android 呼叫C程式碼及生成除錯so庫
不靠譜的朱先生又來了,今天是週五,我又出現了!好了,不為自己多解釋,上週沒發文章,其實我寫了,只是沒有發出來而已……機智ovo。 上週寫的文章是關於GreenDao全面解析,其實當時是想寫一個關於資料庫的系列文章,後來一共就寫了兩篇,SQlite全面解析和GreenDao全面解析。至
Java中enum和C#中的異同
3、所有列舉類都繼承了Enum的方法,下面我們詳細介紹這些方法。 (1) ordinal()方法: 返回列舉值在列舉類種的順序。這個順序根據列舉值宣告的順序而定。 Color.RED.ordinal(); //返回結果:0 Colo
C#呼叫C/C++動態連結庫(.dll)詳解
第一篇編譯C的動態連線庫 在實際工作中,我們經常會將C語言中的.lib和.h檔案(靜態庫)編譯成動態連線庫.dll檔案(這裡只提供這兩種檔案,沒有完整的工程),以提供給其他語言平臺呼叫。 1,必須有.lib檔案,只有.h檔案是無法編譯動態連線庫的。 2,我使用的是V