你写的dll里面使用了类,而标准dll是不能包含类的。你改为C风格的调用就没问题了。也就是说,你的dll用C来写,别用C++

解决方案 »

  1.   

    是只需要改动Sample1.cpp吗
      

  2.   

    #include "Sample1.h"
     #include "lz77.h"
     
     JNIEXPORT jbyteArray JNICALL Java_Sample1_stringMethod
      (JNIEnv *env, jobject obj, jbyteArray array) {  jbyteArray jb;
         jbyte *dest = env->GetByteArrayElements(array,0);
     BYTE src[65536 + 16];
     CCompressLZ77 cc;

     cc.doDecompress(src,(BYTE*)dest);
     printf("%s\n",src);
     env->ReleaseByteArrayElements(array, dest, 0);
     int iSize = strlen((char*)src);
     printf("解压后的长度:");
     printf("%d\n", iSize);
     jb = env->NewByteArray(iSize);
     env->SetByteArrayRegion(array,0,iSize,(jbyte *)src);
     return jb;
     } JNIEXPORT jbyteArray JNICALL Java_Sample1_byteArrayMethod
     (JNIEnv *env, jobject obj, jbyteArray array) {

    jbyteArray jb;
    int len = env->GetArrayLength(array);
    jbyte *src = env->GetByteArrayElements(array,0); printf("压缩前大小:");
    printf("%d\n",len); BYTE desbuf[65536 + 16];
    CCompressLZ77 cc;
    //cc.Compress((BYTE *)src, len, desbuf);
    int iSize = cc.doCompress((BYTE *)src, len, desbuf);
    printf("压缩后大小:");
    printf("%d\n",iSize); //int iSize = strlen((char*)desbuf);
    jb = env->NewByteArray(iSize);
    if(jb == NULL)
     {
    printf("asddf");
    return NULL;
     }
    env->SetByteArrayRegion(jb,0,iSize,(jbyte *)desbuf);
    env->ReleaseByteArrayElements(array, src, 0);
    return jb;
     }JNIEXPORT jstring JNICALL Java_Sample1_testString
      (JNIEnv *env, jobject obj, jstring string) {     const char *str = env->GetStringUTFChars(string, 0);
         int iLen = strlen(str);
     BYTE desbuf[65536 + 16];
     CCompressLZ77 cc;
     cc.Compress((BYTE*)str,iLen, desbuf);
     printf("%s\n",str);
         env->ReleaseStringUTFChars(string, str);
     
         return env->NewStringUTF((char*)desbuf);
     }
     //void main(){}