@@ -46,36 +46,61 @@ void LoadFromFile(void)
46
46
FreeLibrary (handle);
47
47
}
48
48
49
+ void * ReadLibrary (long * pSize) {
50
+ long read;
51
+ void * result;
52
+ FILE* fp;
53
+
54
+ fp = _tfopen (DLL_FILE, _T (" rb" ));
55
+ if (fp == NULL )
56
+ {
57
+ _tprintf (_T (" Can't open DLL file \" %s\" ." ), DLL_FILE);
58
+ return NULL ;
59
+ }
60
+
61
+ fseek (fp, 0 , SEEK_END);
62
+ *pSize = ftell (fp);
63
+ if (*pSize < 0 )
64
+ {
65
+ fclose (fp);
66
+ return NULL ;
67
+ }
68
+
69
+ result = (unsigned char *)malloc (*pSize);
70
+ if (result == NULL )
71
+ {
72
+ return NULL ;
73
+ }
74
+
75
+ fseek (fp, 0 , SEEK_SET);
76
+ read = fread (result, 1 , *pSize, fp);
77
+ fclose (fp);
78
+ if (read != static_cast <size_t >(*pSize))
79
+ {
80
+ free (result);
81
+ return NULL ;
82
+ }
83
+
84
+ return result;
85
+ }
86
+
49
87
void LoadFromMemory (void )
50
88
{
51
- FILE *fp;
52
- unsigned char *data=NULL ;
89
+ void *data;
53
90
long size;
54
- size_t read;
55
91
HMEMORYMODULE handle;
56
92
addNumberProc addNumber;
57
93
HMEMORYRSRC resourceInfo;
58
94
DWORD resourceSize;
59
95
LPVOID resourceData;
60
96
TCHAR buffer[100 ];
61
97
62
- fp = _tfopen (DLL_FILE, _T ( " rb " ) );
63
- if (fp == NULL )
98
+ data = ReadLibrary (&size );
99
+ if (data == NULL )
64
100
{
65
- _tprintf (_T (" Can't open DLL file \" %s\" ." ), DLL_FILE);
66
- goto exit;
101
+ return ;
67
102
}
68
103
69
- fseek (fp, 0 , SEEK_END);
70
- size = ftell (fp);
71
- assert (size >= 0 );
72
- data = (unsigned char *)malloc (size);
73
- assert (data != NULL );
74
- fseek (fp, 0 , SEEK_SET);
75
- read = fread (data, 1 , size, fp);
76
- assert (read == static_cast <size_t >(size));
77
- fclose (fp);
78
-
79
104
handle = MemoryLoadLibrary (data, size);
80
105
if (handle == NULL )
81
106
{
0 commit comments