Java JNI 类类型参数如何传递?

oneworldz 2007-12-12 10:11:27
我现在用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);
请高手明释,谢谢
...全文
402 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
希偌 2007-12-13
  • 打赏
  • 举报
回复
写错了,C++函数名是JNIEXPORT void JNICALL Java_com_xiruo_Test_doTest
希偌 2007-12-13
  • 打赏
  • 举报
回复
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);
}
oneworldz 2007-12-13
  • 打赏
  • 举报
回复
结了~~后面那问题我理解错了,不用这样弄 谢谢咯!
oneworldz 2007-12-13
  • 打赏
  • 举报
回复
谢谢高手~~!我也刚研究出来,和你写的查不多!
麻烦再回答我个类似但又不同的问题吧!
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[]呢?
oneworldz 2007-12-12
  • 打赏
  • 举报
回复
如果JAVA中定义一个类
publicRECT
{
int top;
int left;
int button;
int right;
}
怎么转成RECT*? RECT*应该是结构参数吧?
healer_kx 2007-12-12
  • 打赏
  • 举报
回复
Rectangle Rect穿不成RECT*的。

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

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧