11#define WIN32_LEAN_AND_MEAN
22
33#include < windows.h>
4+ #include < tchar.h>
45#include < stdio.h>
56#include < malloc.h>
67
@@ -13,12 +14,31 @@ typedef int (*addNumberProc)(int, int);
1314void LoadFromFile (void )
1415{
1516 addNumberProc addNumber;
17+ HRSRC resourceInfo;
18+ DWORD resourceSize;
19+ LPVOID resourceData;
20+ _TCHAR buffer[100 ];
21+
1622 HINSTANCE handle = LoadLibrary (DLL_FILE);
1723 if (handle == NULL )
1824 return ;
1925
2026 addNumber = (addNumberProc)GetProcAddress (handle, " addNumbers" );
2127 printf (" From file: %d\n " , addNumber (1 , 2 ));
28+
29+ resourceInfo = FindResource (handle, MAKEINTRESOURCE (VS_VERSION_INFO), RT_VERSION);
30+ printf (" FindResource returned 0x%p\n " , resourceInfo);
31+
32+ resourceSize = SizeofResource (handle, resourceInfo);
33+ resourceData = LoadResource (handle, resourceInfo);
34+ printf (" Resource data: %ld bytes at 0x%p\n " , resourceSize, resourceData);
35+
36+ LoadString (handle, 1 , buffer, sizeof (buffer));
37+ printf (" String1: %s\n " , buffer);
38+
39+ LoadString (handle, 20 , buffer, sizeof (buffer));
40+ printf (" String2: %s\n " , buffer);
41+
2242 FreeLibrary (handle);
2343}
2444
@@ -27,8 +47,12 @@ void LoadFromMemory(void)
2747 FILE *fp;
2848 unsigned char *data=NULL ;
2949 size_t size;
30- HMEMORYMODULE module ;
50+ HMEMORYMODULE handle ;
3151 addNumberProc addNumber;
52+ HMEMORYRSRC resourceInfo;
53+ DWORD resourceSize;
54+ LPVOID resourceData;
55+ _TCHAR buffer[100 ];
3256
3357 fp = fopen (DLL_FILE, " rb" );
3458 if (fp == NULL )
@@ -44,16 +68,30 @@ void LoadFromMemory(void)
4468 fread (data, 1 , size, fp);
4569 fclose (fp);
4670
47- module = MemoryLoadLibrary (data);
48- if (module == NULL )
71+ handle = MemoryLoadLibrary (data);
72+ if (handle == NULL )
4973 {
5074 printf (" Can't load library from memory.\n " );
5175 goto exit;
5276 }
5377
54- addNumber = (addNumberProc)MemoryGetProcAddress (module , " addNumbers" );
78+ addNumber = (addNumberProc)MemoryGetProcAddress (handle , " addNumbers" );
5579 printf (" From memory: %d\n " , addNumber (1 , 2 ));
56- MemoryFreeLibrary (module );
80+
81+ resourceInfo = MemoryFindResource (handle, MAKEINTRESOURCE (VS_VERSION_INFO), RT_VERSION);
82+ printf (" MemoryFindResource returned 0x%p\n " , resourceInfo);
83+
84+ resourceSize = MemorySizeofResource (handle, resourceInfo);
85+ resourceData = MemoryLoadResource (handle, resourceInfo);
86+ printf (" Memory resource data: %ld bytes at 0x%p\n " , resourceSize, resourceData);
87+
88+ MemoryLoadString (handle, 1 , buffer, sizeof (buffer));
89+ printf (" String1: %s\n " , buffer);
90+
91+ MemoryLoadString (handle, 20 , buffer, sizeof (buffer));
92+ printf (" String2: %s\n " , buffer);
93+
94+ MemoryFreeLibrary (handle);
5795
5896exit:
5997 if (data)
0 commit comments