java 调用DLL的问题。。。

来源:互联网 发布:潇潇美容馆淘宝店铺 编辑:程序博客网 时间:2024/06/08 16:52

     由于项目的需要,这两天研究了下有关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

#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,以及文件的转换。;
}

到这里就不知道怎么做了。。。



原创粉丝点击