Wine >> C/C++ >> Dialog >> Resource
RCDATA
參考資訊:
1. win32
2. petzold
3. tutorial
4. examples_win32
main.c
#include <stdio.h> #include <stdlib.h> #include <windows.h> #include "resources.h" void DropFile(HINSTANCE hInstance, DWORD dwID, TCHAR *pResType, TCHAR *pFileName) { DWORD dwRet = 0; HRSRC hRes = FindResource(hInstance, MAKEINTRESOURCE(dwID), pResType); HGLOBAL hRsc = LoadResource(hInstance, hRes); LPVOID lpRsc = (unsigned char *)LockResource(hRsc); DWORD dwFileSize = SizeofResource(hInstance, hRes); HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize); LPVOID pvData = GlobalLock(hGlobal); memcpy(pvData, lpRsc, dwFileSize); HANDLE hFile = CreateFile(pFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); WriteFile(hFile, pvData, dwFileSize, &dwRet, NULL); CloseHandle(hFile); GlobalUnlock(hGlobal); GlobalFree(hGlobal); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { DropFile(hInstance, IDD_ELF, "DATA", "tmp.exe"); DropFile(hInstance, IDD_LIB, "DATA", "tmp.exe.so"); ExitProcess(0); return 0; }
main.rc
#include <windows.h> #include "resources.h" IDD_ELF DATA "test.exe" IDD_LIB DATA "test.exe.so"
resource.h
#define IDD_ELF 101 #define IDD_LIB 102
編譯、執行
$ x86_64-w64-mingw32-windres main.rc -o main.res $ winegcc main.c main.res -o main $ wine ./main.exe