我现在有个abc.dll文件
还有个头文件 aaa.h 我想用java调用这个dll文件
组长让我掉头文件里的一个方法
int DIA_API NewGraph DIA_AL((long FAR *, graphnew_t FAR *));我想问下 java 怎么调用DLL文件里的这个方法
昨天我已经自己做了个java调用dll的小程序 已经跑通 可是像这样的 调用dll里的一个方法怎么实现呀 求帮助~~ 菜鸟请详细告诉下 谢谢
还有个头文件 aaa.h 我想用java调用这个dll文件
组长让我掉头文件里的一个方法
int DIA_API NewGraph DIA_AL((long FAR *, graphnew_t FAR *));我想问下 java 怎么调用DLL文件里的这个方法
昨天我已经自己做了个java调用dll的小程序 已经跑通 可是像这样的 调用dll里的一个方法怎么实现呀 求帮助~~ 菜鸟请详细告诉下 谢谢
JNIEXPORT void JNICALL Java_testdll_setValue
(JNIEnv *, jobject, jint);这样的文件可是现在的头文件里内容
/*
* Copyright (c) 1995 EiwaSystemManagement Co. All Rights Reserved
*/
#ident "@(#)dialib.h 2.33 96/12/19 10:04:27 - EIWA/SCCS"#ifndef DIALIB_H
#define DIALIB_H#ifdef __cplusplus
extern "C" {
#endif
enum {
PY_GETGRAPH = 0,
PY_GETFLAG,
PY_GETREF,
PY_SETREF,
PY_GETPROC,
PY_SETPROC,
PY_GETHWND,
PY_HWND2PANE,
PY_GETPOS,
PY_SETPOS,
PY_CENTVERT,
PY_PT2VERT,
#define PY_REDRAW_FLAG(i, s) MAKELONG(i, s)
PY_REDRAW,
PY_SETREDRAW,
#define PY_MSG_SZ (128)
PY_GETMSG,
PY_SETMSG,
PY_TEXVERT,
PY_CHECKDEF,
PY_GETNEXTPANE,
PY_GETPREVPANE,
PY_PANECLASS,
PY_FIFACLASS,
PY_ASSGRAPH,
PY_sentinel
};
typedef struct paneinc {
long pi_flag; /* flags */
RECT pi_area; /* shown located space (Win32:long) */
} paneinc_t;
enum {
PD_FONT_VERT, /* font for vertex-name drawing */
PD_FONT_SZ
};typedef struct panedef {
long pd_flag;
POINT pd_unit; /* Win32:long */
POINT pd_vert; /* Win32:long */
COLORREF pd_col[PD_COL_SZ];
int pd_pen[PD_PEN_SZ]; /* Win32:long */
LOGFONT pd_font[PD_FONT_SZ]; /* Win32:long */
} panedef_t;
~
long DIA_API EnumPanes DIA_AL((long, long, long, paneenumproc_t, long));
long DIA_API EnumVerts DIA_AL((long, long, long, vertenumproc_t, long));
long DIA_API FindVert DIA_AL((long, vertdef_t FAR *));
int DIA_API LocVerts DIA_AL((long));
int DIA_API ZapVerts DIA_AL((long));
int DIA_API AppVerts DIA_AL((long, vertdef_t FAR *, int));long DIA_API YacGraph DIA_AL((long, int, long));
int DIA_API IncGraph DIA_AL((long, graphinc_t FAR *));
int DIA_API GetGraph DIA_AL((long, graphdef_t FAR *));
int DIA_API SetGraph DIA_AL((long, graphdef_t FAR *));
int DIA_API DelGraph DIA_AL((long));
int DIA_API NewGraph DIA_AL((long FAR *, graphnew_t FAR *));int DIA_API VersionDia DIA_AL((void));
int DIA_API SupportDia DIA_AL((int));我现在想调用这里的
int DIA_API NewGraph DIA_AL((long FAR *, graphnew_t FAR *)); 怎么弄呀
JNIEXPORT void JNICALL Java_testdll_setValue(JNIEnv *, jobject, jint);
拷到你的C文件里,这个方法的主体是调用DIA_AL方法。
类似于这样
JNIEXPORT jint JNICALL Java_com_FileSplit_fileSplit
(JNIEnv *env, jobject a, jstring c, jstring d)
{
const char *str1 = (*env)->GetStringUTFChars(env, c, 0);
const char *str2 = (*env)->GetStringUTFChars(env, d, 0);
char* s[] = {str1, str2};
return splittif(3, s);
这里面是从头文件里拷过来的,这里面的东西是告诉dll,java里写的方法到C里需要执行C里的哪个方法。
我这里因为传的是字符串,所以涉及到字符转换问题。你传的是INT 直接return 就可以了。
}int
splittif(int argc, char* argv[])
{这是我C里的类似于主函数的东西}