天天看點

Java/c/c++調用DLL檔案Java/c/c++調用DLL

Java/c/c++調用DLL

1、Java調用DLL(通過VS2010):

百度上有很多例子,不過因為自己的VC6.0不好用,是以我是在VS2010上面配置的:

Step One:

在Eclipse/MyEclipse上面建立一個Java的工程:

public class TestJNI
{
    static
    {
        System.loadLibrary("TestJNI");
    }
    
    public static native void sayHello(String msg);
    
    public static void main(String[] args)
    {
        sayHello("Hello,this is my first JNI program !");
    }
}
           

Step Two:

在指令行裡面,相應的目錄下面輸入:

javac TestJNI.java --->生成了一個TestJNI.class檔案

javah TestJNI--->生成一個TestJNI.h檔案

Step Three:

1、建立一個工程,選擇Win32Project-->next

2、選擇dll工程--->finish

3、将TestJNI.h、\Java\jdk1.6.0_10\include下面的jni.h、\Java\jdk1.6.0_10\include\win32下面的jawt_md.h放到TestJNI\TestJNI下面,然後通過Solution Explorer-->Header Files-->Add-->Existing Item添加這三個檔案

4、修改stdafx.h檔案:

Java/c/c++調用DLL檔案Java/c/c++調用DLL

Step Four:

1、編輯TestJNI.cpp的檔案:

// TestJNI.cpp : Defines the exported functions for the DLL application.
//

#include "stdafx.h"
#include "TestJNI.h"

JNIEXPORT void JNICALL Java_TestJNI_sayHello(JNIEnv * env, jclass obj, jstring jMsg)
{
    const char *strMsgPtr = env->GetStringUTFChars( jMsg , 0);   

       MessageBox( 0, TEXT("Hello World!"), TEXT("Tip"), 0 );

       env->ReleaseStringUTFChars( jMsg, strMsgPtr); 
}

           

注意:編譯的時候會出現:

Java/c/c++調用DLL檔案Java/c/c++調用DLL

,不要擔心,因為在檔案夾裡面還是會生成出現dll檔案,這個好像是因為dll是需要程式去調用它的,現在沒有程式是以會報錯的原因。

2、打開工程屬性,選擇Configuration Properties --->VC++ Directories--->include Directories 添加jdk路徑下的include和/include/win32目錄,這裡包含jni.h等頭檔案

3、build工程,打開工程目錄的debug目錄,将其中生成的TestJNI.dll考到java工程的java.library.path目錄下(一般的是系統的system32目錄),當然也可在工程的配置裡面配置java.library.path目錄為dll檔案所在的目錄

Step Five:

正常情況下就可以了

2、在C/C++裡面調用DLL:

Step One:

打開VC6.0建立一個DLL: 1、檔案-->工程-->Win32 Dynamic-Link Library-->工程名稱(如:dll) 2、建立一個c檔案-->檔案-->建立-->C++ Source File-->工程名稱(如dllDemo.c),複制以下内容:

#include <windows.h>
#include "dlldemo.h" 
int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) { 
 return TRUE ; 
} 
EXPORT void  add() { 
	printf("Hello World!");
}

           

3、建立一個.h的檔案-->檔案-->建立-->文本檔案-->工程名稱(如:dll),複制下面内容:

#include <windows.h>
#include "dlldemo.h" 
int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) { 
 return TRUE ; 
} 
EXPORT void  add() { 
	printf("Hello World!");
}

           

Step Two:

建立一個c檔案來調用dll檔案: 在建立的c檔案下,複制以下内容:

#include <WINDOWS.H>    
#include <WINBASE.H>    
#include <stdio.h>
typedef int (*MYPROC)(); 
int main()   
{   
        HINSTANCE LibHandle;   
        MYPROC ProcAdd; 
        char dllbuf[] = "dll.dll";//dll的路徑   
        char sysbuf[] = "add";   /*過程名*/
        
        LibHandle = LoadLibrary(dllbuf);   /*載入dll*/ 
        ProcAdd = (MYPROC)GetProcAddress(LibHandle, sysbuf);   /*擷取函數sysbuf的位址*/
	   (ProcAdd)();
  
}
           

運作即可。