由于项目的需要,这两天研究了下有关JAVA调用DLL的内容,由于自己的水平还处于初级阶段吧,在网上也找了很多资料但是对于项目一直没什么进展,
我用的是JNI的调用。
第三方给我们提供了调用的方法的文档,包括DLL,相关的Include,lib文件。
如:INFSDK_Net.dll, INFSDK_Net.h,INFSDK_Net.lib等等。。
如方法原型:
INFSDK_API bool STDCALL INFNET_Init()
功能:初始化解码库SDK,调用其他SDK函数的前提
INFSDK_API long STDCALL INFNET_Login(const char *sDevIP,
const unsigned int nDevPort,
const char *sUserName,
const char *sPassword);
功能:用户注册
首先在JAVA中写一个类:
package com.sihan;
public class TestDLL {
public native void INFNET_Init();//初始化
public native void INFNET_Login(String IP,int Port,String UserName,String Password);//登陆的方法
static{
System.loadLibrary("TestDll");
}
}
然后开始编译它,生成.class文件和需要的头文件com_sihan_TestDLL.h。
javac -d . TestDLL.java
javah com.sihan.TestDLL
头文件内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_sihan_TestDLL */
#ifndef _Included_com_sihan_TestDLL
#define _Included_com_sihan_TestDLL
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_sihan_TestDLL
* Method: INFNET_Init
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_sihan_TestDLL_INFNET_1Init
(JNIEnv *, jobject);
/*
* Class: com_sihan_TestDLL
* Method: INFNET_Login
* Signature: (Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_com_sihan_TestDLL_INFNET_1Login
(JNIEnv *, jobject, jstring, jint, jstring, jstring);
#ifdef __cplusplus
}
#endif
然后启动VC,新建工程,选择win32 Dynamic-link Library 工程名为TestDll,把com_sihan_TestDLL.h加到工程中,
然后新建C++ Source File,生成一个空的TestDll.cpp.
内容如下;
#include <iostream.h>
#include "com_sihan_TestDLL.h"
#include "windows.h"
JNIEXPORT void JNICALL Java_com_sihan_TestDLL_INFNET_1Init
(JNIEnv *env, jobject newTestDLL)
{
//这里的方法不知道怎么写了,;
}
JNIEXPORT void JNICALL Java_com_sihan_TestDLL_INFNET_1Login
(JNIEnv *env, jobject newTestDLL, jstring IP, jint Port, jstring UserName, jstring Password)
{
//这里的方法不知道怎么写了,还有怎么去调用INFSDK_Net.dll,以及文件的转换。;
}
到这里就不知道怎么做了。。。