我想在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 > 0)
{
npSetFlag = TRUE;
}
POST_MM   PostNum[50000]; FILE* fpmm[50000];
FILE *iFileHandle;          .........
          ...........
}
具体该怎样操作? 能否说详细点 谢谢

解决方案 »

  1.   

    用COM组件封装一下。
    HRESULT ParsePacket(BSTR Path, int nPacket, BSTR* OutPutFile)
    {
        ... ...调用你的函数
    }
      

  2.   

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

  3.   

    JNI应该是不支持CString的。
    可能也不支持char*用来返回字符串数据。JNI,你要把函数改形式。但是可能存在一定程度的内存泄漏。你(maybe)要提供其他函数进行内存释放。
    char* /*outPutFile*/ parsepacket(const char* strPath, int nPacket = 0)
    {
        ... ...
    }
      

  4.   

    我用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 > 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("PeelOff");
    }

    public native static void parsepacket(String strPath,String outPutFile,int nPacket);}然后我在别的java文件里调用parsepacket()这个方法就行了不知道我上面的代码是否有问题啊?? 请大侠指点。编译生成dll文件有错误