4 * Copyright 1993 Robert J. Amstadt
5 * Copyright 1995 Alexandre Julliard
11 #include <sys/types.h>
28 #define PrintId(name) \
29 if (HIWORD((DWORD)name)) \
30 dprintf_resource( stddeb, "'%s'", (char *)PTR_SEG_TO_LIN(name)); \
32 dprintf_resource( stddeb, "#%04x", LOWORD(name));
34 extern WORD WINE_LanguageId
;
36 /**********************************************************************
37 * FindResource16 (KERNEL.60)
39 HRSRC16
FindResource16( HMODULE16 hModule
, SEGPTR name
, SEGPTR type
)
43 hModule
= GetExePtr( hModule
); /* In case we were passed an hInstance */
44 dprintf_resource(stddeb
, "FindResource16: module=%04x type=", hModule
);
46 if (HIWORD(name
)) /* Check for '#xxx' name */
48 char *ptr
= PTR_SEG_TO_LIN( name
);
50 if (!(name
= (SEGPTR
)atoi( ptr
+ 1 ))) return 0;
53 dprintf_resource( stddeb
, " name=" );
55 dprintf_resource( stddeb
, "\n" );
56 if (!(pModule
= MODULE_GetPtr( hModule
))) return 0;
58 if (pModule
->flags
& NE_FFLAGS_WIN32
)
60 fprintf(stderr
,"Don't know how to FindResource16() for Win32 module\n");
63 return NE_FindResource( hModule
, type
, name
);
65 return LIBRES_FindResource16( hModule
, name
, type
);
70 /**********************************************************************
71 * FindResource32A (KERNEL32.128)
73 HANDLE32
FindResource32A( HINSTANCE32 hModule
, LPCSTR name
, LPCSTR type
)
75 return FindResourceEx32A(hModule
,name
,type
,WINE_LanguageId
);
78 /**********************************************************************
79 * FindResourceEx32A (KERNEL32.129)
81 HANDLE32
FindResourceEx32A(
82 HINSTANCE32 hModule
,LPCSTR name
,LPCSTR type
,WORD lang
87 if (HIWORD((DWORD
)name
))
88 xname
= HEAP_strdupAtoW( GetProcessHeap(), 0, name
);
91 if (HIWORD((DWORD
)type
))
92 xtype
= HEAP_strdupAtoW( GetProcessHeap(), 0, type
);
95 ret
= FindResourceEx32W( hModule
, xname
, xtype
, lang
);
96 if (HIWORD((DWORD
)name
)) HeapFree( GetProcessHeap(), 0, xname
);
97 if (HIWORD((DWORD
)type
)) HeapFree( GetProcessHeap(), 0, xtype
);
102 /**********************************************************************
103 * FindResourceEx32W (KERNEL32.130)
105 HRSRC32
FindResourceEx32W(
106 HINSTANCE32 hModule
, LPCWSTR name
, LPCWSTR type
, WORD lang
111 if (!hModule
) hModule
= GetTaskDS();
112 hModule
= GetExePtr( hModule
); /* In case we were passed an hInstance */
113 dprintf_resource(stddeb
, "FindResource32W: module=%08x type=", hModule
);
115 dprintf_resource(stddeb
,"%p",type
);
117 dprintf_resource(stddeb
,"#%p",type
);
118 dprintf_resource( stddeb
, " name=" );
120 dprintf_resource(stddeb
,"%p",name
);
122 dprintf_resource(stddeb
,"#%p",name
);
123 dprintf_resource( stddeb
, "\n" );
124 if (!(pModule
= MODULE_GetPtr( hModule
))) return 0;
125 if (!(pModule
->flags
& NE_FFLAGS_WIN32
)) return 0;
126 return PE_FindResourceEx32W(hModule
,name
,type
,lang
);
128 return LIBRES_FindResource32( hModule
, name
, type
);
132 /**********************************************************************
133 * FindResource32W (KERNEL32.131)
135 HRSRC32
FindResource32W( HINSTANCE32 hModule
, LPCWSTR name
, LPCWSTR type
)
137 return FindResourceEx32W(hModule
,name
,type
,WINE_LanguageId
);
141 /**********************************************************************
142 * LoadResource16 (KERNEL.61)
144 HGLOBAL16
LoadResource16( HMODULE16 hModule
, HRSRC16 hRsrc
)
148 hModule
= GetExePtr( hModule
); /* In case we were passed an hInstance */
149 dprintf_resource(stddeb
, "LoadResource16: module=%04x res=%04x\n",
151 if (!hRsrc
) return 0;
152 if (!(pModule
= MODULE_GetPtr( hModule
))) return 0;
154 if (pModule
->flags
& NE_FFLAGS_WIN32
)
156 fprintf(stderr
,"Don't know how to LoadResource16() for Win32 module\n");
159 return NE_LoadResource( hModule
, hRsrc
);
161 return LIBRES_LoadResource( hModule
, hRsrc
);
165 /**********************************************************************
166 * LoadResource32 (KERNEL32.370)
168 HGLOBAL32
LoadResource32( HINSTANCE32 hModule
, HRSRC32 hRsrc
)
173 if (!hModule
) hModule
= GetTaskDS(); /* FIXME: see FindResource32W */
174 hModule
= GetExePtr( hModule
); /* In case we were passed an hInstance */
175 dprintf_resource(stddeb
, "LoadResource32: module=%04x res=%04x\n",
177 if (!hRsrc
) return 0;
179 if (!(pModule
= MODULE_GetPtr( hModule
))) return 0;
180 if (!(pModule
->flags
& NE_FFLAGS_WIN32
))
182 fprintf(stderr
,"LoadResource32: tried to load a non win32 resource.\n");
183 return 0; /* FIXME? */
185 return PE_LoadResource32(hModule
,hRsrc
);
187 return LIBRES_LoadResource( hModule
, hRsrc
);
192 /**********************************************************************
193 * LockResource (KERNEL.62)
196 SEGPTR
WIN16_LockResource16(HGLOBAL16 handle
)
202 dprintf_resource(stddeb
, "LockResource: handle=%04x\n", handle
);
203 if (!handle
) return (SEGPTR
)0;
204 hModule
= GetExePtr( handle
);
205 if (!(pModule
= MODULE_GetPtr( hModule
))) return 0;
206 if (pModule
->flags
& NE_FFLAGS_WIN32
)
208 fprintf(stderr
,"Don't know how to LockResource() for Win32 module\n");
211 return NE_LockResource( hModule
, handle
);
213 return LIBRES_LockResource( handle
);
217 /* WINELIB 16-bit version */
218 LPVOID
LockResource16( HGLOBAL16 handle
)
224 dprintf_resource(stddeb
, "LockResource: handle=%04x\n", handle
);
225 if (!handle
) return NULL
;
226 hModule
= GetExePtr( handle
);
227 if (!(pModule
= MODULE_GetPtr( hModule
))) return 0;
228 if (pModule
->flags
& NE_FFLAGS_WIN32
)
230 fprintf(stderr
,"Don't know how to LockResource16() for Win32 module\n");
233 return (LPSTR
)PTR_SEG_TO_LIN( NE_LockResource( hModule
, handle
) );
235 return LIBRES_LockResource( handle
);
240 /**********************************************************************
241 * LockResource32 (KERNEL32.384)
243 LPVOID
LockResource32( HGLOBAL32 handle
)
245 return (LPVOID
)handle
;
249 /**********************************************************************
250 * FreeResource16 (KERNEL.63)
252 BOOL16
FreeResource16( HGLOBAL16 handle
)
258 dprintf_resource(stddeb
, "FreeResource16: handle=%04x\n", handle
);
259 if (!handle
) return FALSE
;
260 hModule
= GetExePtr( handle
);
261 if (!(pModule
= MODULE_GetPtr( hModule
))) return 0;
262 if (pModule
->flags
& NE_FFLAGS_WIN32
)
264 fprintf(stderr
,"Don't know how to FreeResource16() for Win32 module\n");
267 return NE_FreeResource( hModule
, handle
);
269 return LIBRES_FreeResource( handle
);
273 /**********************************************************************
274 * FreeResource32 (KERNEL32.145)
276 BOOL32
FreeResource32( HGLOBAL32 handle
)
278 /* no longer used in Win32 */
283 /**********************************************************************
284 * AccessResource16 (KERNEL.64)
286 INT16
AccessResource16( HINSTANCE16 hModule
, HRSRC16 hRsrc
)
290 hModule
= GetExePtr( hModule
); /* In case we were passed an hInstance */
291 dprintf_resource(stddeb
, "AccessResource16: module=%04x res=%04x\n",
293 if (!hRsrc
) return 0;
294 if (!(pModule
= MODULE_GetPtr( hModule
))) return 0;
296 if (pModule
->flags
& NE_FFLAGS_WIN32
)
298 fprintf(stderr
,"Don't know how to AccessResource16() for Win32 module\n");
301 return NE_AccessResource( hModule
, hRsrc
);
303 return LIBRES_AccessResource( hModule
, hRsrc
);
308 /**********************************************************************
309 * AccessResource32 (KERNEL32.64)
311 INT32
AccessResource32( HINSTANCE32 hModule
, HRSRC32 hRsrc
)
313 hModule
= GetExePtr( hModule
); /* In case we were passed an hInstance */
314 dprintf_resource(stddeb
, "AccessResource: module=%04x res=%04x\n",
316 if (!hRsrc
) return 0;
317 fprintf(stderr
,"AccessResource32: not implemented\n");
322 /**********************************************************************
323 * SizeofResource16 (KERNEL.65)
325 DWORD
SizeofResource16( HMODULE16 hModule
, HRSRC16 hRsrc
)
329 hModule
= GetExePtr( hModule
); /* In case we were passed an hInstance */
330 dprintf_resource(stddeb
, "SizeofResource16: module=%04x res=%04x\n",
332 if (!(pModule
= MODULE_GetPtr( hModule
))) return 0;
334 if (pModule
->flags
& NE_FFLAGS_WIN32
)
336 fprintf(stderr
,"Don't know how to SizeOfResource16() for Win32 module\n");
339 return NE_SizeofResource( hModule
, hRsrc
);
341 return LIBRES_SizeofResource( hModule
, hRsrc
);
346 /**********************************************************************
347 * SizeofResource32 (KERNEL32.522)
349 DWORD
SizeofResource32( HINSTANCE32 hModule
, HRSRC32 hRsrc
)
351 hModule
= GetExePtr( hModule
); /* In case we were passed an hInstance */
352 dprintf_resource(stddeb
, "SizeofResource32: module=%04x res=%04x\n",
355 return PE_SizeofResource32(hModule
,hRsrc
);
357 fprintf(stderr
,"SizeofResource32: not implemented\n");
363 /**********************************************************************
364 * AllocResource16 (KERNEL.66)
366 HGLOBAL16
AllocResource16( HMODULE16 hModule
, HRSRC16 hRsrc
, DWORD size
)
370 hModule
= GetExePtr( hModule
); /* In case we were passed an hInstance */
371 dprintf_resource(stddeb
, "AllocResource: module=%04x res=%04x size=%ld\n",
372 hModule
, hRsrc
, size
);
373 if (!hRsrc
) return 0;
374 if (!(pModule
= MODULE_GetPtr( hModule
))) return 0;
376 if (pModule
->flags
& NE_FFLAGS_WIN32
)
378 fprintf(stderr
,"Don't know how to AllocResource() for Win32 module\n");
381 return NE_AllocResource( hModule
, hRsrc
, size
);
383 return LIBRES_AllocResource( hModule
, hRsrc
, size
);
387 /**********************************************************************
388 * DirectResAlloc (KERNEL.168)
390 * Check Schulman, p. 232 for details
392 HGLOBAL16
DirectResAlloc( HINSTANCE16 hInstance
, WORD wType
, UINT16 wSize
)
394 dprintf_resource(stddeb
,"DirectResAlloc(%04x,%04x,%04x)\n",
395 hInstance
, wType
, wSize
);
396 hInstance
= GetExePtr(hInstance
);
397 if(!hInstance
)return 0;
398 if(wType
!= 0x10) /* 0x10 is the only observed value, passed from
399 CreateCursorIndirect. */
400 fprintf(stderr
, "DirectResAlloc: wType = %x\n", wType
);
401 return GLOBAL_Alloc(GMEM_MOVEABLE
, wSize
, hInstance
, FALSE
, FALSE
, FALSE
);
405 /**********************************************************************
406 * LoadAccelerators16 [USER.177]
408 HACCEL16
LoadAccelerators16(HINSTANCE16 instance
, SEGPTR lpTableName
)
414 ACCELHEADER
*lpAccelTbl
;
417 if (HIWORD(lpTableName
))
418 dprintf_accel( stddeb
, "LoadAccelerators: %04x '%s'\n",
419 instance
, (char *)PTR_SEG_TO_LIN( lpTableName
) );
421 dprintf_accel( stddeb
, "LoadAccelerators: %04x %04x\n",
422 instance
, LOWORD(lpTableName
) );
424 if (!(hRsrc
= FindResource16( instance
, lpTableName
, RT_ACCELERATOR
)))
426 if (!(rsc_mem
= LoadResource16( instance
, hRsrc
))) return 0;
428 lp
= (BYTE
*)LockResource16(rsc_mem
);
429 n
= SizeofResource16(instance
,hRsrc
)/sizeof(ACCELENTRY
);
430 hAccel
= GlobalAlloc16(GMEM_MOVEABLE
,
431 sizeof(ACCELHEADER
) + (n
+ 1)*sizeof(ACCELENTRY
));
432 lpAccelTbl
= (LPACCELHEADER
)GlobalLock16(hAccel
);
433 lpAccelTbl
->wCount
= 0;
434 for (i
= 0; i
< n
; i
++) {
435 lpAccelTbl
->tbl
[i
].type
= *(lp
++);
436 lpAccelTbl
->tbl
[i
].wEvent
= *((WORD
*)lp
);
438 lpAccelTbl
->tbl
[i
].wIDval
= *((WORD
*)lp
);
440 if (lpAccelTbl
->tbl
[i
].wEvent
== 0) break;
441 dprintf_accel(stddeb
,
442 "Accelerator #%u / event=%04X id=%04X type=%02X \n",
443 i
, lpAccelTbl
->tbl
[i
].wEvent
, lpAccelTbl
->tbl
[i
].wIDval
,
444 lpAccelTbl
->tbl
[i
].type
);
445 lpAccelTbl
->wCount
++;
447 GlobalUnlock16(hAccel
);
448 FreeResource16( rsc_mem
);
452 /**********************************************************************
453 * LoadAccelerators32W [USER.177]
454 * The image layout seems to look like this (not 100% sure):
455 * 00: BYTE type type of accelerator
456 * 01: BYTE pad (to WORD boundary)
459 * 06: WORD pad (to DWORD boundary)
461 HACCEL32
LoadAccelerators32W(HINSTANCE32 instance
,LPCWSTR lpTableName
)
467 ACCELHEADER
*lpAccelTbl
;
470 if (HIWORD(lpTableName
))
471 dprintf_accel( stddeb
, "LoadAccelerators: %04x '%s'\n",
472 instance
, (char *)( lpTableName
) );
474 dprintf_accel( stddeb
, "LoadAccelerators: %04x %04x\n",
475 instance
, LOWORD(lpTableName
) );
477 if (!(hRsrc
= FindResource32W( instance
, lpTableName
,
478 (LPCWSTR
)RT_ACCELERATOR
)))
480 if (!(rsc_mem
= LoadResource32( instance
, hRsrc
))) return 0;
482 lp
= (BYTE
*)LockResource32(rsc_mem
);
483 n
= SizeofResource32(instance
,hRsrc
)/sizeof(ACCELENTRY
);
484 hAccel
= GlobalAlloc16(GMEM_MOVEABLE
,
485 sizeof(ACCELHEADER
) + (n
+ 1)*sizeof(ACCELENTRY
));
486 lpAccelTbl
= (LPACCELHEADER
)GlobalLock16(hAccel
);
487 lpAccelTbl
->wCount
= 0;
488 for (i
= 0; i
< n
; i
++) {
489 lpAccelTbl
->tbl
[i
].type
= *lp
;
491 lpAccelTbl
->tbl
[i
].wEvent
= *((WORD
*)lp
);
493 lpAccelTbl
->tbl
[i
].wIDval
= *((WORD
*)lp
);
495 if (lpAccelTbl
->tbl
[i
].wEvent
== 0) break;
496 dprintf_accel(stddeb
,
497 "Accelerator #%u / event=%04X id=%04X type=%02X \n",
498 i
, lpAccelTbl
->tbl
[i
].wEvent
, lpAccelTbl
->tbl
[i
].wIDval
,
499 lpAccelTbl
->tbl
[i
].type
);
500 lpAccelTbl
->wCount
++;
502 GlobalUnlock16(hAccel
);
503 FreeResource32(rsc_mem
);
507 HACCEL32
LoadAccelerators32A(HINSTANCE32 instance
,LPCSTR lpTableName
)
511 if (HIWORD(lpTableName
))
512 uni
= HEAP_strdupAtoW( GetProcessHeap(), 0, lpTableName
);
514 uni
= (LPWSTR
)lpTableName
;
515 result
= LoadAccelerators32W(instance
,uni
);
516 if (HIWORD(uni
)) HeapFree( GetProcessHeap(), 0, uni
);
521 /**********************************************************************
525 LoadString16(HINSTANCE16 instance
,UINT16 resource_id
,LPSTR buffer
,INT16 buflen
)
533 dprintf_resource(stddeb
,"LoadString: inst=%04x id=%04x buff=%08x len=%d\n",
534 instance
, resource_id
, (int) buffer
, buflen
);
536 hrsrc
= FindResource16( instance
, (SEGPTR
)((resource_id
>>4)+1), RT_STRING
);
537 if (!hrsrc
) return 0;
538 hmem
= LoadResource16( instance
, hrsrc
);
541 p
= LockResource16(hmem
);
542 string_num
= resource_id
& 0x000f;
543 for (i
= 0; i
< string_num
; i
++)
546 dprintf_resource( stddeb
, "strlen = %d\n", (int)*p
);
548 i
= MIN(buflen
- 1, *p
);
552 memcpy(buffer
, p
+ 1, i
);
559 fprintf(stderr
,"LoadString // I dont know why , but caller give buflen=%d *p=%d !\n", buflen
, *p
);
560 fprintf(stderr
,"LoadString // and try to obtain string '%s'\n", p
+ 1);
562 FreeResource16( hmem
);
564 dprintf_resource(stddeb
,"LoadString // '%s' copied !\n", buffer
);
568 /**********************************************************************
569 * LoadString32W (USER32.375)
572 LoadString32W(HINSTANCE32 instance
,UINT32 resource_id
,LPWSTR buffer
,int buflen
)
580 dprintf_resource(stddeb
, "LoadString: instance = %04x, id = %04x, buffer = %08x, "
581 "length = %d\n", instance
, (int)resource_id
, (int) buffer
, buflen
);
583 hrsrc
= FindResource32W( instance
, (LPCWSTR
)((resource_id
>>4)+1),
584 (LPCWSTR
)RT_STRING
);
585 if (!hrsrc
) return 0;
586 hmem
= LoadResource32( instance
, hrsrc
);
589 p
= LockResource32(hmem
);
590 string_num
= resource_id
& 0x000f;
591 for (i
= 0; i
< string_num
; i
++)
594 dprintf_resource( stddeb
, "strlen = %d\n", (int)*p
);
596 i
= MIN(buflen
- 1, *p
);
600 memcpy(buffer
, p
+ 1, i
* sizeof (WCHAR
));
601 buffer
[i
] = (WCHAR
) 0;
604 buffer
[0] = (WCHAR
) 0;
608 fprintf(stderr
,"LoadString // I dont know why , but caller give buflen=%d *p=%d !\n", buflen
, *p
);
609 fprintf(stderr
,"LoadString // and try to obtain string '%s'\n", p
+ 1);
613 dprintf_resource(stddeb
,"LoadString // '%s' copied !\n", buffer
);
618 /**********************************************************************
619 * LoadString32A (USER32.374)
622 LoadString32A(HINSTANCE32 instance
,UINT32 resource_id
,LPSTR buffer
,int buflen
)
625 LPWSTR buffer2
= NULL
;
626 if (buffer
) buffer2
= HeapAlloc( GetProcessHeap(), 0, buflen
* 2 );
627 retval
= LoadString32W(instance
,resource_id
,buffer2
,buflen
);
631 lstrcpynWtoA( buffer
, buffer2
, buflen
);
632 HeapFree( GetProcessHeap(), 0, buffer2
);
637 /* Messages...used by FormatMessage32* (KERNEL32.something)
639 * They can be specified either directly or using a message ID and
640 * loading them from the resource.
642 * The resourcedata has following format:
644 * 0: DWORD nrofentries
645 * nrofentries * subentry:
646 * 0: DWORD firstentry
648 * 8: DWORD offset from start to the stringentries
650 * (lastentry-firstentry) * stringentry:
651 * 0: WORD len (0 marks end)
652 * 2: WORD unknown (flags?)
654 * (stringentry i of a subentry refers to the ID 'firstentry+i')
656 * Yes, ANSI strings in win32 resources. Go figure.
659 /**********************************************************************
660 * LoadMessage32A (internal)
664 HINSTANCE32 instance
,UINT32 id
,WORD lang
,LPSTR buffer
,int buflen
669 int nrofentries
,i
,slen
;
675 struct _stringentry
{
681 dprintf_resource(stddeb
, "LoadMessage: instance = %04x, id = %04x, buffer = %08x, "
682 "length = %d\n", instance
, (int)id
, (int) buffer
, buflen
);
684 /*FIXME: I am not sure about the '1' ... But I've only seen those entries*/
685 hrsrc
= FindResourceEx32W(instance
,(LPWSTR
)1,(LPCWSTR
)RT_MESSAGELIST
,lang
);
686 if (!hrsrc
) return 0;
687 hmem
= LoadResource32( instance
, hrsrc
);
690 p
= LockResource32(hmem
);
691 nrofentries
= *(DWORD
*)p
;
693 se
= (struct _subentry
*)(p
+4);
694 for (i
=nrofentries
;i
--;) {
695 if ((id
>=se
->firstentry
) && (id
<=se
->lastentry
)) {
696 stre
= (struct _stringentry
*)(p
+se
->offset
);
697 id
-= se
->firstentry
;
705 if (!(slen
=stre
->len
))
707 stre
= (struct _stringentry
*)(((char*)stre
)+slen
);
710 dprintf_resource(stddeb
," - strlen=%d\n",slen
);
711 i
= MIN(buflen
- 1, slen
);
713 return slen
; /* different to LoadString */
715 lstrcpyn32A(buffer
,stre
->str
,i
);
724 dprintf_resource(stddeb
,"LoadMessage // '%s' copied !\n", buffer
);
728 /**********************************************************************
729 * LoadMessage32W (internal)
731 INT32
LoadMessage32W( HINSTANCE32 instance
, UINT32 id
, WORD lang
,
732 LPWSTR buffer
, int buflen
)
735 LPSTR buffer2
= NULL
;
736 if (buffer
) buffer2
= HeapAlloc( GetProcessHeap(), 0, buflen
);
737 retval
= LoadMessage32A(instance
,id
,lang
,buffer2
,buflen
);
740 lstrcpynAtoW( buffer
, buffer2
, buflen
);
741 HeapFree( GetProcessHeap(), 0, buffer2
);
747 /**********************************************************************
748 * SetResourceHandler (KERNEL.43)
751 SetResourceHandler(HINSTANCE16 instance
,SEGPTR s
,FARPROC16 farproc
)
754 fprintf(stderr
,"SetResourceHandler(%04x,%s,%p), empty STUB!\n",
755 instance
,(char*)PTR_SEG_TO_LIN(s
),farproc
);
757 fprintf(stderr
,"SetResourceHandler(%04x,0x%04x,%p), empty STUB!\n",
758 instance
,LOWORD(s
),farproc
);
763 /**********************************************************************
764 * EnumResourceTypesA (KERNEL32.90)
767 EnumResourceTypes32A(HMODULE32 hmodule
,ENUMRESTYPEPROC32A lpfun
,LONG lParam
) {
768 return PE_EnumResourceTypes32A(hmodule
,lpfun
,lParam
);
771 /**********************************************************************
772 * EnumResourceTypesW (KERNEL32.91)
775 EnumResourceTypes32W(HMODULE32 hmodule
,ENUMRESTYPEPROC32W lpfun
,LONG lParam
) {
776 return PE_EnumResourceTypes32W(hmodule
,lpfun
,lParam
);
779 /**********************************************************************
780 * EnumResourceNamesA (KERNEL32.88)
783 EnumResourceNames32A(HMODULE32 hmodule
,LPCSTR type
,ENUMRESNAMEPROC32A lpfun
,LONG lParam
) {
784 return PE_EnumResourceNames32A(hmodule
,type
,lpfun
,lParam
);
786 /**********************************************************************
787 * EnumResourceNamesW (KERNEL32.89)
790 EnumResourceNames32W(HMODULE32 hmodule
,LPCWSTR type
,ENUMRESNAMEPROC32W lpfun
,LONG lParam
) {
791 return PE_EnumResourceNames32W(hmodule
,type
,lpfun
,lParam
);
794 /**********************************************************************
795 * EnumResourceLanguagesA (KERNEL32.86)
798 EnumResourceLanguages32A(HMODULE32 hmodule
,LPCSTR type
,LPCSTR name
,ENUMRESLANGPROC32A lpfun
,LONG lParam
) {
799 return PE_EnumResourceLanguages32A(hmodule
,type
,name
,lpfun
,lParam
);
801 /**********************************************************************
802 * EnumResourceLanguagesW (KERNEL32.87)
805 EnumResourceLanguages32W(HMODULE32 hmodule
,LPCWSTR type
,LPCWSTR name
,ENUMRESLANGPROC32W lpfun
,LONG lParam
) {
806 return PE_EnumResourceLanguages32W(hmodule
,type
,name
,lpfun
,lParam
);