一个视频采集卡,外接一个摄象机!
然后视频采集卡自带一个应用程序,运行以后有两个窗体.
一个窗体用来显示摄象机镜头看到的东西(就是跟设想头一样).
一个窗体就是一些按扭组成的.点相关按扭就能实现抓图.抓录象什么的功能!
其实就跟设想头差不多的概念...
然后我需要用java实现类似的功能.
这个卡有一个vc的开发包api什么的.
我打算用java直接调用vc 的 dll文件..
可我不知道哪个用来显示摄象头看到的东西的哪个窗体应该用什么控件?
我同事用vc的cview说能实现.可是我不知道用java怎么写!也不明白如果我
java的本地方法,要调用一个dll的方法,这个dll方法如果还要调用另外一个dll的方法!然后
返回值是一个对象.那我 get()的返回值怎么写啊?写object吗?
因为dll返回的哪个对象类型我肯定没有相关的类啊!public class TestDLL {
//调用dll
static { 
System.loadLibrary("test");
}
//本地声明
public native static int get();


public static void main(String args[])
{
get();
}}谢谢大家拜托了

解决方案 »

  1.   

    JNI是要先声明Java接口的,然后生成c的声明文件,不能直接调用现有的dll中的方法。
    不过你可以在实现本地方法中调用它
      

  2.   

    楼上正确楼主队dll调用实现没有清楚
      

  3.   

    确实有点不好处理,返回的句柄好象不一样.可以这样试试,在本地方法中传一个与C++类相同结构的类,比如:MyCCalss.public native static void get(MyCCalss cClass);然后在C++中调用此类中的方法,把需要的值填充进去.JNIEXPORT void JNICALL
    Java_Callbacks_nativeMethod(JNIEnv *env, jobject obj, jobject cClass)
    {
        jclass cls = (*env)->GetObjectClass(env, cClass);
        // 获取MethodID 
        jmethodID mid = (*env)->GetMethodID(env, cls, "setValue", "(I)V");
        if (mid == 0) {
            return;
        }
       // 将C++类中的值填充到相应的JAVA类中
       (*env)->Call<Type>Method(env, cClass, mid, ...);  //...}
      

  4.   

    JNI是要先声明Java接口的,然后生成c的声明文件,不能直接调用现有的dll中的方法。
    不过你可以在实现本地方法中调用它!
    --------------这个我测试过一个简单的例子没问题啊!我现在的问题是,不知道如果调用的这个dll文件的方法的返回数值是一个,用户自定义的对象!
    例如是
    public native static VCOBJECT get();这样的东西我这里的返回数值应该怎么写?写object吗?
    public class TestDLL {
    //调用dll
    static { 
    System.loadLibrary("test");
    }
    //本地声明
    public native static VCOBJECT get();


    public static void main(String args[])
    {
    get();
    }}
      

  5.   

    我能不能这样做?
    因为这个采集卡提供一个应用程序!
    我用
    Runtime.getRuntime().exec(应用程序.exe).
    然后让用户在他的作好的东西里面操作!然后用户抓图以后,我用什么办法
    能获得用户抓取图片后存放的路径就行了!其实我的目的就是为了,获得用户抓取图片的路径。然后在对图片进行一些处理啊
      

  6.   

    应该没多大问题,刚才这个public native static void get(MyCCalss cClass)相当于把cClass当作引用来传,java中可能有问题.你可以参照下面的方法构建个对象,并把它返回来.即
    public native static void get(MyCCalss cClass) 改为:
    public native static MyCCalss get(...)找自定义java类的jclass  可以用jclass cls = (*env)->FindClass(env, "jni/.../MyCClass.class"); 然后构建
    jobject AllocObject(JNIEnv *env, jclass clazz); 
    NewObject
    NewObjectA然后用上面方法填充,返回此对象.NewObjectV
      

  7.   

    Runtime.getRuntime().exec(应用程序.exe).
    然后让用户在他的作好的东西里面操作!然后用户抓图以后,我用什么办法能获得用户抓取图片后存放的路径就行了!其实我的目的就是为了,获得用户抓取图片的路径。然后在对图片进行一些处理啊
    -----------------------------------哈,不懂. ^_^(应用程序.exe,有输出此路径吗? Process.getInputStream,...)
      

  8.   

    我还没太明白.我在详细看看!
    另外
    那这个
    然后我需要用java实现类似的功能.
    这个卡有一个vc的开发包api什么的.
    我打算用java直接调用vc 的 dll文件..
    可我不知道哪个用来显示摄象头看到的东西的哪个窗体应该用什么控件?
    我同事用vc的cview说能实现.可是我不知道用java怎么写!问题有办法解决吗?
      

  9.   

    我觉得你可以换一种思路,用 C++ 把对硬件访问的操作包装成一个能把视频数据发送到网络上程序,然后用java接收网络数据包,这样既可以实现网络功能,java程序也没有失去可移植性,难度
    也不比java直接操作dll复杂。