我想用java的jni调用下面的c++函数; PeelOff.cpp文件
void parsepacket(CString strPath, char* outPutFile, int nPacket = 0)
{
typedef struct {
DWORD snoop_seconds;
DWORD snoop_msecs;
DWORD snoop_length_inc;
DWORD snoop_length_orig;
}eth_frame;
typedef struct {
WORD SourcePort;
WORD DestPort;
}POST_MM;
BOOL npSetFlag = FALSE;
if(nPacket > 0)
{
npSetFlag = TRUE;
}
POST_MM PostNum[50000]; FILE* fpmm[50000];
FILE *iFileHandle; .........
...........
}JNIEXPORT void JNICALL Java_PeelOff_parsepacket
(JNIEnv * env, jclass cl, jstring a, jstring b, jint c)
{
const char* cstrPath = env->GetStringUTFChars(a);
const char* coutPutPath = env->GetStringUTFChars(b);
parsepacket(cstrPath,coutPutPath,c);
}
------------------------------------------------------------------
用javah编译PeelOff.java文件生成的头文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class PeelOff */#ifndef _Included_PeelOff
#define _Included_PeelOff
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: PeelOff
* Method: parsepacket
* Signature: (Ljava/lang/String;Ljava/lang/String;I)V
*/
JNIEXPORT void JNICALL Java_PeelOff_parsepacket
(JNIEnv *, jclass, jstring, jstring, jint);#ifdef __cplusplus
}
#endif
#endif
------------------------------------------------------------------
然后在这个 PeelOff.java文件中来调用。 从而达到从java中调用c++的函数
public class PeelOff
{
static
{
System.loadLibrary("PeelOff");
}
public native static void parsepacket(String strPath,String outPutFile,int nPacket);}在编译生成dll文件总是报错误,无法完成编译! 不知道我以上的代码哪里写的不对啊?感觉应该是PeelOff.cpp这个代码有问题
void parsepacket(CString strPath, char* outPutFile, int nPacket = 0)
{
typedef struct {
DWORD snoop_seconds;
DWORD snoop_msecs;
DWORD snoop_length_inc;
DWORD snoop_length_orig;
}eth_frame;
typedef struct {
WORD SourcePort;
WORD DestPort;
}POST_MM;
BOOL npSetFlag = FALSE;
if(nPacket > 0)
{
npSetFlag = TRUE;
}
POST_MM PostNum[50000]; FILE* fpmm[50000];
FILE *iFileHandle; .........
...........
}JNIEXPORT void JNICALL Java_PeelOff_parsepacket
(JNIEnv * env, jclass cl, jstring a, jstring b, jint c)
{
const char* cstrPath = env->GetStringUTFChars(a);
const char* coutPutPath = env->GetStringUTFChars(b);
parsepacket(cstrPath,coutPutPath,c);
}
------------------------------------------------------------------
用javah编译PeelOff.java文件生成的头文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class PeelOff */#ifndef _Included_PeelOff
#define _Included_PeelOff
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: PeelOff
* Method: parsepacket
* Signature: (Ljava/lang/String;Ljava/lang/String;I)V
*/
JNIEXPORT void JNICALL Java_PeelOff_parsepacket
(JNIEnv *, jclass, jstring, jstring, jint);#ifdef __cplusplus
}
#endif
#endif
------------------------------------------------------------------
然后在这个 PeelOff.java文件中来调用。 从而达到从java中调用c++的函数
public class PeelOff
{
static
{
System.loadLibrary("PeelOff");
}
public native static void parsepacket(String strPath,String outPutFile,int nPacket);}在编译生成dll文件总是报错误,无法完成编译! 不知道我以上的代码哪里写的不对啊?感觉应该是PeelOff.cpp这个代码有问题
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货