我现在用JAVA写一个程序调用现有VB编写test.dll.因为test.dll不符合JNI编写规范,所以在中间还必须编写一个VC++编写的jtest.dll.
一部分函数已经能够成功调用,举个例子说明:
typedef bool (_stdcall *WOCRInit)(int iOcrType,int iHZtype,int iCharacterSet, int res1 );
JNIEXPORT jboolean JNICALL Java_DLLBean_WOcrInit(JNIEnv *env, jclass obj, jint iOcrType, jint iHZtype, jint iCharacterSet, jint res1)
{ HINSTANCE hTest;
WOCRInit wocrInit;
bool bo;
hTest=LoadLibrary("OcrWencui.dll");
wocrInit =(WOCRInit)GetProcAddress(hTest,"WOcrInit");
     bo = wocrInit(iOcrType,iHZtype,iCharacterSet,res1);//调用
return bo;
}
提问:
public native static  boolean WOcrStart(int Bitmap,Rectangle Rect);//Rectangle为四边形类
这个函数中的Rectangle Rect参数如何传递?
如何实现:
typedef bool (_stdcall *WOcrStart)(……)中的参数列表
WOcrStart(……)中的参数列表test.dll关于这两个函数的接口定义为
VC: extern "C" BOOL _stdcall EXPORT WOcrStart (HBITMAP Bitmap, RECT* Rect);
请高手明释,谢谢

解决方案 »

  1.   

    Rectangle Rect穿不成RECT*的。把RECT的四个分量变成参数是最方便的解决手段。其他的别想了。
      

  2.   

    如果JAVA中定义一个类
    publicRECT 
    {
      int top;
      int left;
      int button;
      int right;
    }
    怎么转成RECT*?  RECT*应该是结构参数吧?
      

  3.   

    java中定义如下结构:
    package com.xiruo;public class RECT { 
        int   top; 
        int   left; 
        int   button; 
        int   right; 
    } 类:
    package com.xiruo;public class Test {
        public native void doTest(com.xiruo.RECT rect);
    }C++:
    JNIEXPORT void JNICALL Java_com_xiruo_Test
    (JNIEnv *env, jobject _obj)
    {
        jclass objectClass = (env)->FindClass("com/xiruo/RECT");    jfieldID fldTop = (env)->GetFieldID(objectClass, "top", "I");    jobject topObj = (env)->GetObjectField(obj, fldTop);    jint jiTop = (jint)topObj;    printf("top = %d\n", jiTop);
    }
      

  4.   

    写错了,C++函数名是JNIEXPORT   void   JNICALL   Java_com_xiruo_Test_doTest
      

  5.   

    谢谢高手~~!我也刚研究出来,和你写的查不多!
    麻烦再回答我个类似但又不同的问题吧!
    JAVA 定义一个类
    public class TOCRResult {
        public int Count;
        public TResult Result[];//TResult为自己定义的另外一个类
        public TOCRResult() {
        }    
    }
    C++里定义的结构参数为
    struct TOCRResult {
      int Count;
      TResult Result[]; 
    };
    怎么把Java 中的TResult Result[]传到C++中的TResult Result[]呢?