站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题怎样在java中调用这段c++代码,大侠帮我看看啊

怎样在java中调用这段c++代码,大侠帮我看看啊

摘要: 怎样在java中调用这段c++代码,大侠帮我看看啊


我想在java中调用这段c++代码
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 -#62; 0)
{
npSetFlag = TRUE;
}
POST_MM PostNum[50000];

FILE* fpmm[50000];
FILE *iFileHandle;

.........
...........
}
具体该怎样操作? 能否说详细点 谢谢


用COM组件封装一下。


HRESULT ParsePacket(BSTR Path, int nPacket, BSTR* OutPutFile)
{
... ...调用你的函数。。。
}





怎么用com组件封装一下啊? 是用jni么


JNI应该是不支持CString的。
可能也不支持char*用来返回字符串数据。

JNI,你要把函数改形式。但是可能存在一定程度的内存泄漏。你(maybe)要提供其他函数进行内存释放。


char* /*outPutFile*/ parsepacket(const char* strPath, int nPacket = 0)
{
... ...
}




我用jni方法这么调用对不对啊?这个是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 -#62; 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)
{
parsepacket(a,b,c);

}

这个PeelOff.java文件
public class PeelOff
{
static
{
System.loadLibrary(-#34;PeelOff-#34;);
}

public native static void parsepacket(String strPath,String outPutFile,int nPacket);

}

然后我在别的java文件里调用parsepacket()这个方法就行了

不知道我上面的代码是否有问题啊?? 请大侠指点。编译生成dll文件有错误


↑返回目录
前一篇: 获得SOCKET端口的简单问题!
后一篇: JDK1.5 class反编译工具