View difference between Paste ID: VJ1jpB7J and Ey3TAAQg
SHOW: | | - or go back to the newest paste.
1
#include <jni.h>
2-
#include <iostream>
2+
#include <Windows.h>
3
#include <string.h>
4
#include "unace/UnACE.h"
5-
using namespace std;
5+
#include "unace/CallbackProc.h"
6
#include "throwJNI.h"
7
#include "net_sf_junace_UnACE.h"
8-
  (JNIEnv *, jobject, jstring, jobject)
8+
9
#define   FILELISTSIZE   32768  // pretty much for this this example:
10-
	cout<<"wolam Java_net_sf_junace_UnACE_nativeACEList"<<endl;
10+
                                // only the commandline can be used to
11
                                // specify files..
12
#define   COMMENTBUFSIZE 8192   // comments may be up to 32k in size
13
                                // increase it if you want to put that
14
                                // large comments to archives, or if
15
                                // you want to receive all of these large
16
                                // comments (ACE_COMMENT_SMALLBUF returned
17
                                // if comment does not fit into buffer)
18
19
HINSTANCE AceDllInstance;
20
CHAR      FileList[FILELISTSIZE];
21
CHAR      CommentBuf[COMMENTBUFSIZE];
22
23
INT (__stdcall *ACEInitDllProc)(pACEInitDllStruc DllData);
24
INT (__stdcall *ACEReadArchiveDataProc)(LPSTR ArchiveName, pACEReadArchiveDataStruc ArchiveData);
25
INT (__stdcall *ACEListProc)(LPSTR ArchiveName, pACEListStruc List);
26
INT (__stdcall *ACETestProc)(LPSTR ArchiveName, pACETestStruc Test);
27
INT (__stdcall *ACEExtractProc)(LPSTR ArchiveName, pACEExtractStruc Extract);
28
29
30
INT     CallAceInitDll(void)
31
{
32
tACEInitDllStruc
33
          DllData;
34
35
  memset(&DllData, 0, sizeof(DllData));   // set all fields to zero
36
37
  DllData.GlobalData.MaxArchiveTestBytes = 0x2ffFF; // search for archive
38
                                                    // header in first 256k
39
                                                    // of file
40
  DllData.GlobalData.MaxFileBufSize      = 0x2ffFF; // read/write buffer size
41
                                                    // is 256k
42
43
  DllData.GlobalData.Comment.BufSize     = sizeof(CommentBuf);
44
  DllData.GlobalData.Comment.Buf         = CommentBuf; // set comment bufffer
45
                                                       // to receive comments
46
                                                       // of archive and/or
47
                                                       // set comments
48
49
  DllData.GlobalData.TempDir             = "C:\\TEMP"; // set temp dir
50
51
  // set callback function pointers
52
  DllData.GlobalData.InfoCallbackProc    = InfoProc;
53
  DllData.GlobalData.ErrorCallbackProc   = ErrorProc;
54
  DllData.GlobalData.RequestCallbackProc = RequestProc;
55
  DllData.GlobalData.StateCallbackProc   = StateProc;
56
57
  return ACEInitDllProc(&DllData);
58
}
59
60
JNIEXPORT void JNICALL Java_net_sf_junace_UnACE_nativeACEList
61
  (JNIEnv *env, jobject jObj1, jstring archiveName, jobject jObj2)
62
{
63
	tACEListStruc List;
64
	LPSTR str;
65
	str = (LPSTR)env->GetStringUTFChars(archiveName, NULL);
66
    if (str == NULL) {
67
        return; // already thrown OutOfMemoryError
68
    }
69
	memset(&List, 0, sizeof(List));     // set all fields to zero
70
71
    List.Files.SourceDir   = "";        // archive main directory is
72
                                      // base directory for FileList
73
    List.Files.FileList    = FileList;  // set FileList
74
    List.Files.ExcludeList = "";        // no files to exclude
75
    List.Files.FullMatch   = 0;         // also list files partially matching
76
                                      // (for instance: list DIR1\TEST.DAT
77
                                      //  if FileList specifies TEST.DAT)
78
79
	ACEListProc(str, &List);
80
	env->ReleaseStringUTFChars(archiveName, str); // enable releasing by Garbage Collector
81
}
82
83
JNIEXPORT jboolean JNICALL Java_net_sf_junace_UnACE_LoadAceDll
84
  (JNIEnv *env, jobject)
85
{
86
	AceDllInstance = LoadLibrary(L"UnAceV2.Dll");
87
	if (AceDllInstance) {
88
		 if (!(ACEInitDllProc          = (INT (__stdcall *)(pACEInitDllStruc DllData))
89
              GetProcAddress(AceDllInstance, "ACEInitDll"))
90
        || !(ACEReadArchiveDataProc    = (INT (__stdcall *)(LPSTR ArchiveName, pACEReadArchiveDataStruc ArchiveData))
91
              GetProcAddress(AceDllInstance, "ACEReadArchiveData"))
92
        || !(ACEListProc               = (INT (__stdcall *)(LPSTR ArchiveName, pACEListStruc List))
93
              GetProcAddress(AceDllInstance, "ACEList"))
94
        || !(ACETestProc               = (INT (__stdcall *)(LPSTR ArchiveName, pACETestStruc Test))
95
              GetProcAddress(AceDllInstance, "ACETest"))
96
        || !(ACEExtractProc            =  (INT (__stdcall *)(LPSTR ArchiveName, pACEExtractStruc Extract))
97
              GetProcAddress(AceDllInstance, "ACEExtract")))
98
         {
99
            FreeLibrary(AceDllInstance);
100
		    throwUnsatisfiedLinkError(env, "Could not find function in UnAceV2.Dll!");
101
            return FALSE;
102
         }
103
		 CallAceInitDll();			
104
	}
105
	else 
106
		throwUnsatisfiedLinkError(env, "Can't load UnAceV2.Dll");
107
	return AceDllInstance != NULL;
108
}