Check-in [9f9e8588d4]

Not logged in
Overview
SHA1 Hash:9f9e8588d40ced798feb247d4b6dbab89bfe8e7f
Date: 2015-07-02 16:22:43
User: kinaba
Comment:0.06: avoid crash when _Bga32.dll does not exist.
Timelines: family | ancestors | trunk
Downloads: Tarball | ZIP archive
Other Links: files | file ages | manifest
Tags And Properties
Changes
hide diffs unified diffs patch

Modified readme.txt from [eccd2f6b41af12e3] to [5bf9c42ae0210e1e].

1 ---------------------------- 1 ---------------------------- 2 Quasi-Bga32.DLL 2015/05/05 | 2 Quasi-Bga32.DLL 2015/07/03 3 ---------------------------- 3 ---------------------------- 4 4 5 http://www.forest.impress.co.jp/article/2004/07/30/arcsecurity.html 5 http://www.forest.impress.co.jp/article/2004/07/30/arcsecurity.html 6 https://jvn.jp/jp/JVN78689801/ 6 https://jvn.jp/jp/JVN78689801/ 7 �ȂǂŎw�E����Ă���Ǝ㐫���C�ɂȂ邯��ǁABga32.dll �͎g������������ 7 �ȂǂŎw�E����Ă���Ǝ㐫���C�ɂȂ邯��ǁABga32.dll �͎g������������ 8 �����l�̂��߂̉����ł��BQBga32.DLL �ł́A�W�J�����͂����̖��� 8 �����l�̂��߂̉����ł��BQBga32.DLL �ł́A�W�J�����͂����̖��� 9 �Ώ����‚“����ōs���A���k�Ȃǂ̑��̏����͑S�ăI���W�i����Bga32.dll�� 9 �Ώ����‚“����ōs���A���k�Ȃǂ̑��̏����͑S�ăI���W�i����Bga32.dll�� ................................................................................................................................................................................ 24 * ���̂Ƃ���A���W�X�g���̐ݒ��ǂݍ��݂܂���B 24 * ���̂Ƃ���A���W�X�g���̐ݒ��ǂݍ��݂܂���B 25 * �G���[���̕Ԓl�����ɂ��������ł��B 25 * �G���[���̕Ԓl�����ɂ��������ł��B 26 * �㏑���m�F�_�C�A���O���ȑf�Ȃ��̂ɂȂ��Ă��܂��B 26 * �㏑���m�F�_�C�A���O���ȑf�Ȃ��̂ɂȂ��Ă��܂��B 27 * �R�}���h���C����I�v�V�����A���C���h�J�[�h�̉��߂� 27 * �R�}���h���C����I�v�V�����A���C���h�J�[�h�̉��߂� 28 �I���W�i���Ɠ����ɂȂ�悤�ɍ�����‚���ł��B 28 �I���W�i���Ɠ����ɂȂ�悤�ɍ�����‚���ł��B 29 * �������A�ˊтō�����̂ł��Ԃ�o�O���炯�ł��B 29 * �������A�ˊтō�����̂ł��Ԃ�o�O���炯�ł��B 30 30 > 31 ���̑���API�����Bga()API�ɂ��̑��̃R�}���h��^�����Ƃ��́A_Bga32.DLL �� > 32 �����̊֐��Ɉ��������̂܂܊ۓ������܂��B_Bga32.DLL �����‚���Ȃ������Ƃ��́A > 33 Bga() ����̓G���[�R�[�h 0x9000 ���A����ȊO�� API �����ꂼ��̃G���[��Ԃ��܂��B > 34 31 ���X�V���� 35 ���X�V���� 32 36 > 37 2015/07/03 (0.06) > 38 * _Bga32.DLL �����݂��Ȃ���ԂŌĂт���Ă��N���b�V�����Ȃ��悤�ɏC�� 33 2015/05/05 (0.05) 39 2015/05/05 (0.05) 34 * https://jvn.jp/vu/JVNVU78689801/ (zlib/libbz2�̐Ǝ㐫) �ւ̑Ώ� 40 * https://jvn.jp/vu/JVNVU78689801/ (zlib/libbz2�̐Ǝ㐫) �ւ̑Ώ� 35 * zlib �̃o�[�W������ 1.2.8 �ɍX�V(���邽�߂�dmd�̃o�[�W������ 2.067 �ɍX�V) 41 * zlib �̃o�[�W������ 1.2.8 �ɍX�V(���邽�߂�dmd�̃o�[�W������ 2.067 �ɍX�V) 36 * libbz2 �̃o�[�W������ 1.0.6 �ɍX�V 42 * libbz2 �̃o�[�W������ 1.0.6 �ɍX�V 37 2010/11/25 (0.04) 43 2010/11/25 (0.04) 38 * _Bga32.dll ��T���Ώۃp�X����J�����g�f�B���N�g�����O���܂��� 44 * _Bga32.dll ��T���Ώۃp�X����J�����g�f�B���N�g�����O���܂��� 39 2004/8/31 (0.03) 45 2004/8/31 (0.03)

Modified src/qbga32.d from [1c734ac63ab48040] to [55bc981232a3491c].

1 import win32.windows; 1 import win32.windows; 2 import std.string; 2 import std.string; 3 import std.file; 3 import std.file; > 4 import std.traits; 4 import util; 5 import util; 5 import windll; 6 import windll; 6 import bga_melter; 7 import bga_melter; 7 import qbga_gui; 8 import qbga_gui; 8 9 9 //---------------------------------------------------------------- 10 //---------------------------------------------------------------- 10 // API転送処理 11 // API転送処理 11 //---------------------------------------------------------------- 12 //---------------------------------------------------------------- 12 13 13 WinDLL g_orig_dll = null; 14 WinDLL g_orig_dll = null; 14 UINT WM_ARCEXTRACT; 15 UINT WM_ARCEXTRACT; > 16 const ERROR_NO_BGA32DLL = 0x9000; 15 17 16 static this() 18 static this() 17 { 19 { 18 g_orig_dll = WinDLL.load( "_Bga32.DLL" ); 20 g_orig_dll = WinDLL.load( "_Bga32.DLL" ); 19 WM_ARCEXTRACT = RegisterWindowMessage("wm_arcextract"); 21 WM_ARCEXTRACT = RegisterWindowMessage("wm_arcextract"); 20 } 22 } 21 23 22 static ~this() 24 static ~this() 23 { 25 { > 26 if(g_orig_dll) 24 g_orig_dll.close(); | 27 g_orig_dll.close(); 25 } 28 } 26 29 27 template api(FnT) | 30 FnT api(FnT, int defaultR)(string name) 28 { 31 { 29 FnT api( string name ) | 32 FnT def = function(ParameterTypeTuple!(FnT) xs) { 30 { < 31 return g_orig_dll.get_api!(FnT)( name ); < > 33 return cast(ReturnType!(FnT))defaultR; 32 } | 34 }; > 35 if(g_orig_dll is null) return def; > 36 FnT f = g_orig_dll.get_api!(FnT)(name); > 37 return f ? f : def; 33 } 38 } 34 39 35 //---------------------------------------------------------------- 40 //---------------------------------------------------------------- 36 // 統合アーカイバAPI:転送 41 // 統合アーカイバAPI:転送 37 //---------------------------------------------------------------- 42 //---------------------------------------------------------------- 38 43 39 extern(Windows) 44 extern(Windows) 40 { 45 { 41 int Bga( HWND a, immutable char* b, char* c, DWORD d ) 46 int Bga( HWND a, immutable char* b, char* c, DWORD d ) 42 { 47 { 43 int r = Bga_impl( a, b.fromStringz() ); 48 int r = Bga_impl( a, b.fromStringz() ); 44 if( r < 0 ) // このダミーDLLでは処理できないコマンドだった時 49 if( r < 0 ) // このダミーDLLでは処理できないコマンドだった時 45 return api!(typeof(&Bga))("Bga")(a,b,c,d); | 50 return api!(typeof(&Bga), ERROR_NO_BGA32DLL)("Bga")(a,b, 46 return r; 51 return r; 47 } 52 } 48 53 49 WORD QBgaGetVersion() 54 WORD QBgaGetVersion() 50 { 55 { 51 return 5; | 56 return 6; 52 } 57 } 53 58 54 WORD BgaGetVersion() 59 WORD BgaGetVersion() 55 { 60 { 56 return api!(typeof(&BgaGetVersion))("BgaGetVersion")(); | 61 return api!(typeof(&BgaGetVersion), 0)("BgaGetVersion")(); 57 } 62 } 58 63 59 BOOL BgaGetRunning() 64 BOOL BgaGetRunning() 60 { 65 { 61 return api!(typeof(&BgaGetRunning))("BgaGetRunning")(); | 66 return api!(typeof(&BgaGetRunning), FALSE)("BgaGetRunning")(); 62 } 67 } 63 68 64 BOOL BgaCheckArchive( char* a, int b ) 69 BOOL BgaCheckArchive( char* a, int b ) 65 { 70 { 66 return api!(typeof(&BgaCheckArchive))("BgaCheckArchive")(a,b); | 71 return api!(typeof(&BgaCheckArchive), FALSE)("BgaCheckArchive")( 67 } 72 } 68 73 69 BOOL BgaConfigDialog( HWND a, char* b, int c ) 74 BOOL BgaConfigDialog( HWND a, char* b, int c ) 70 { 75 { 71 return api!(typeof(&BgaConfigDialog))("BgaConfigDialog")(a,b,c); | 76 return api!(typeof(&BgaConfigDialog), ERROR_NO_BGA32DLL)("BgaCon 72 } 77 } 73 78 74 int BgaGetFileCount( char* a ) 79 int BgaGetFileCount( char* a ) 75 { 80 { 76 return api!(typeof(&BgaGetFileCount))("BgaGetFileCount")(a); | 81 return api!(typeof(&BgaGetFileCount), -1)("BgaGetFileCount")(a); 77 } 82 } 78 83 79 BOOL BgaQueryFunctionList( int a ) 84 BOOL BgaQueryFunctionList( int a ) 80 { 85 { 81 return api!(typeof(&BgaQueryFunctionList))("BgaQueryFunctionList | 86 return api!(typeof(&BgaQueryFunctionList), FALSE)("BgaQueryFunct 82 } 87 } 83 88 84 alias void* HARC; 89 alias void* HARC; 85 HARC BgaOpenArchive( HWND a, char* b, DWORD c ) 90 HARC BgaOpenArchive( HWND a, char* b, DWORD c ) 86 { 91 { 87 return api!(typeof(&BgaOpenArchive))("BgaOpenArchive")(a,b,c); | 92 return api!(typeof(&BgaOpenArchive), 0)("BgaOpenArchive")(a,b,c) 88 } 93 } 89 94 90 int BgaCloseArchive( HARC a ) 95 int BgaCloseArchive( HARC a ) 91 { 96 { 92 return api!(typeof(&BgaCloseArchive))("BgaCloseArchive")(a); | 97 return api!(typeof(&BgaCloseArchive), 0)("BgaCloseArchive")(a); 93 } 98 } 94 99 95 alias void* LPINDIVIDUALINFO; 100 alias void* LPINDIVIDUALINFO; 96 int BgaFindFirst( HARC a, char* b, LPINDIVIDUALINFO c ) 101 int BgaFindFirst( HARC a, char* b, LPINDIVIDUALINFO c ) 97 { 102 { 98 return api!(typeof(&BgaFindFirst))("BgaFindFirst")(a,b,c); | 103 return api!(typeof(&BgaFindFirst), -1)("BgaFindFirst")(a,b,c); 99 } 104 } 100 105 101 int BgaFindNext( HARC a, LPINDIVIDUALINFO b ) 106 int BgaFindNext( HARC a, LPINDIVIDUALINFO b ) 102 { 107 { 103 return api!(typeof(&BgaFindNext))("BgaFindNext")(a,b); | 108 return api!(typeof(&BgaFindNext), -1)("BgaFindNext")(a,b); 104 } 109 } 105 110 106 DWORD BgaGetArcOriginalSize( HARC a ) 111 DWORD BgaGetArcOriginalSize( HARC a ) 107 { 112 { 108 return api!(typeof(&BgaGetArcOriginalSize))("BgaGetArcOriginalSi | 113 return api!(typeof(&BgaGetArcOriginalSize), -1)("BgaGetArcOrigin 109 } 114 } 110 115 111 DWORD BgaGetArcCompressedSize( HARC a ) 116 DWORD BgaGetArcCompressedSize( HARC a ) 112 { 117 { 113 return api!(typeof(&BgaGetArcCompressedSize))("BgaGetArcCompress | 118 return api!(typeof(&BgaGetArcCompressedSize), -1)("BgaGetArcComp 114 } 119 } 115 120 116 WORD BgaGetArcRatio( HARC a ) 121 WORD BgaGetArcRatio( HARC a ) 117 { 122 { 118 return api!(typeof(&BgaGetArcRatio))("BgaGetArcRatio")(a); | 123 return api!(typeof(&BgaGetArcRatio), -1)("BgaGetArcRatio")(a); 119 } 124 } 120 125 121 BOOL BgaSetOwnerWindow( HWND a ) 126 BOOL BgaSetOwnerWindow( HWND a ) 122 { 127 { 123 BOOL r = api!(typeof(&BgaSetOwnerWindow))("BgaSetOwnerWindow")(a | 128 BOOL r = api!(typeof(&BgaSetOwnerWindow), FALSE)("BgaSetOwnerWin 124 if( r ) BgaSetOwnerWindow_impl(a); 129 if( r ) BgaSetOwnerWindow_impl(a); 125 return r; 130 return r; 126 } 131 } 127 132 128 BOOL BgaClearOwnerWindow() 133 BOOL BgaClearOwnerWindow() 129 { 134 { 130 BOOL r = api!(typeof(&BgaClearOwnerWindow))("BgaClearOwnerWindow | 135 BOOL r = api!(typeof(&BgaClearOwnerWindow), FALSE)("BgaClearOwne 131 BgaClearOwnerWindow_impl(); 136 BgaClearOwnerWindow_impl(); 132 return r; 137 return r; 133 } 138 } 134 139 135 alias BOOL function(HWND,UINT,UINT,EXTRACTINGINFOEX*) ARCHIVERPROC; 140 alias BOOL function(HWND,UINT,UINT,EXTRACTINGINFOEX*) ARCHIVERPROC; 136 BOOL BgaSetOwnerWindowEx( HWND a, ARCHIVERPROC* b ) 141 BOOL BgaSetOwnerWindowEx( HWND a, ARCHIVERPROC* b ) 137 { 142 { 138 BOOL r = api!(typeof(&BgaSetOwnerWindowEx))("BgaSetOwnerWindowEx | 143 BOOL r = api!(typeof(&BgaSetOwnerWindowEx), FALSE)("BgaSetOwnerW 139 if( r ) BgaSetOwnerWindowEx_impl(a,b); 144 if( r ) BgaSetOwnerWindowEx_impl(a,b); 140 return r; 145 return r; 141 } 146 } 142 147 143 BOOL BgaKillOwnerWindowEx( HWND a ) 148 BOOL BgaKillOwnerWindowEx( HWND a ) 144 { 149 { 145 BOOL r = api!(typeof(&BgaKillOwnerWindowEx))("BgaKillOwnerWindow | 150 BOOL r = api!(typeof(&BgaKillOwnerWindowEx), FALSE)("BgaKillOwne 146 BgaClearOwnerWindow_impl(); 151 BgaClearOwnerWindow_impl(); 147 return r; 152 return r; 148 } 153 } 149 154 150 alias void* UNLHA_WND_ENUMMEMBPROC; 155 alias void* UNLHA_WND_ENUMMEMBPROC; 151 BOOL BgaSetEnumMembersProc( UNLHA_WND_ENUMMEMBPROC a ) 156 BOOL BgaSetEnumMembersProc( UNLHA_WND_ENUMMEMBPROC a ) 152 { 157 { 153 return api!(typeof(&BgaSetEnumMembersProc))("BgaSetEnumMembersPr | 158 return api!(typeof(&BgaSetEnumMembersProc), FALSE)("BgaSetEnumMe 154 } 159 } 155 160 156 BOOL BgaClearEnumMembersProc() 161 BOOL BgaClearEnumMembersProc() 157 { 162 { 158 return api!(typeof(&BgaClearEnumMembersProc))("BgaClearEnumMembe | 163 return api!(typeof(&BgaClearEnumMembersProc), FALSE)("BgaClearEn 159 } 164 } 160 } 165 } 161 166 162 //---------------------------------------------------------------- 167 //---------------------------------------------------------------- 163 // 統合アーカイバAPI:実装( Bga ) 168 // 統合アーカイバAPI:実装( Bga ) 164 //---------------------------------------------------------------- 169 //---------------------------------------------------------------- 165 170