现在调用视频的插件,是dll的,如何调用dll的方法呢?
dll的名字叫dhnetsdk.dll
dll里面有方法:
CLIENT_Init
初始化SDK, 在所有的SDK函数之前调用。
BOOL CLIENT_Init(
  fDisConnect cbDisConnect,
  DWORD dwUser
);
Parameters cbDisConnect  
断线回调函数,回调出当前网络已经断开的设备, 对调用SDK的ClIENT_LogOut()函数主动断开的设备不回调,设置为0时禁止回调 [in]dwUser  
用户数据  
CallBack function
typedef void(CALLBACK *fDisConnect)(
  LONG lLoginID,
  char *pchDVRIP,
  LONG nDVRPort,
  DWORD dwUser
);我想用java调用上面的初始化方法,不知道如何调用,希望知道的帮下忙。谢谢 ,最好提供下代码。可以采用jni、jna

解决方案 »

  1.   

    1。 用C++调用dll
    2。 写JNI,你调用那个C++。
      

  2.   

    又是JNI调DLL的问题
    JNI调用第三方dll的一般做法
    你需要在java里定义一个native方法,根据需要定义好里面的参数,然后用javah生成头文件,在C里用该头文件写个dll(这个叫第二方dll,java直接可调用的),在这个dll中去调用你的那个视频dll(这个叫第三方dll,java不直接调用的)
    所以只要保证第二方dll调用第三方dll的参数类型正确即可,也就是说java和第二方dll的参数可以根据需要来定,可以和第三方dll的参数一致,也可以不一致,只要第二方dll调用第三方dll后,能把结果传给java就可以了。
      

  3.   

    另一帖子给出答复了Sampleclass Test {
        static {
            System.loadLibrary("mydll"); //C编译的dll
        }    public static void main(String[] args) {
            System.out.println(init());
        }    public static native boolean init();    
    }javac Test //编译
    javah Test //生成C的头文件,结果大概如下/* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class Test */#ifndef _Included_Test
    #define _Included_Test
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     Test
     * Method:    init
     * Signature: ()Z
     */
    JNIEXPORT jboolean JNICALL Java_Test_init
      (JNIEnv *, jclass);#ifdef __cplusplus
    }
    #endif
    #endif用该头文件在C里编写相应的处理#include <stdio.h>
    #include <windows.h>
    #include "Test.h"
    //#include some other head filetypedef bool ( *dllFp )(fDisConnect, DWORD); //定义dll接口指针JNIEXPORT jboolean JNICALL Java_Test_init
      (JNIEnv *, jclass) {
        
        HINSTANCE dllhandle;
        dllFp proc;    fDisConnect cbDisConnect;
        DWORD dwUser;    jboolean result = false;    printf("loadlibrary\n");
        dllhandle = LoadLibrary("dhnetsdk.dll");
        printf("get dll entry\n");
        proc = (dllFp) GetProcAddress(dllhandle, "CLIENT_Init");
        if (proc == NULL) {
            printf("%s\n", "CLIENT_Init not found");
            return result;
        }
        
        //设置cbDisConnect和dwUser;
        
        printf("call dll entry\n");    
        result = (jboolean)((*proc)(cbDisConnect, dwUser));    printf("free dll\n");    
        if (dllhandle != NULL) {
            FreeLibrary (dllhandle);
        }    return result;
    }把C编译为dll
      

  4.   

    可以看这个帖子,我昨天刚刚解答了一个JNI的
    http://topic.csdn.net/u/20110615/16/4cfa220f-7020-4551-93d0-64b7c6d88c6b.html
      

  5.   

    使用jna轻松,愉快
    http://wenku.baidu.com/view/f54e781dfad6195f312ba6bc.html
    http://download.csdn.net/source/2248938
      

  6.   

     public void test()
        {
            try
            {
                System.loadLibrary("dhnetsdk");
            }
            catch (UnsatisfiedLinkError e)
            {
                System.loadLibrary("dhnetsdk");
            }
      

  7.   

    用jna解决了,有想问的,联系我~
      

  8.   

    那个dll里面的方法你是怎么知道的,多谢了
      

  9.   

    那个dll里面的方法你是怎么知道的,多谢了