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 | } |