Как говорит Manuell, вы используете FindResource(), LoadResource() и, вероятно, LockResource() и SizeofResource()
Я случайно есть некоторый код, который делает вытаскивает ресурс и записывает его в файл, и может помочь с пониманием API, о котором идет речь.
void WriteResourceToFile(
HANDLE hFile,
const _tstring &resourceName,
const _tstring &resourceType,
HMODULE hModule)
{
HRSRC hResource = ::FindResource(
hModule,
resourceName.c_str(),
resourceType.c_str());
if (!hResource)
{
const DWORD lastError = ::GetLastError();
throw CWin32Exception(
_T("WriteResourceToFile() - FindResource"),
lastError);
}
HGLOBAL hGlobal = ::LoadResource(hModule, hResource);
if (!hGlobal)
{
const DWORD lastError = ::GetLastError();
throw CWin32Exception(
_T("WriteResourceToFile() - LoadResource"),
lastError);
}
void *pData = ::LockResource(hGlobal);
if (!pData)
{
const DWORD lastError = ::GetLastError();
throw CWin32Exception(
_T("WriteResourceToFile() - LockResource"),
lastError);
}
const DWORD bytes = ::SizeofResource(hModule, hResource);
DWORD bytesWritten = 0;
if (!::WriteFile(hFile, pData, bytes, &bytesWritten, 0))
{
const DWORD lastError = ::GetLastError();
throw CWin32Exception(
_T("WriteResourceToFile() - WriteFile"),
lastError);
}
if (bytesWritten != bytes)
{
throw CWin32Exception(
_T("WriteResourceToFile() - WriteFile"),
_T("Wrote less bytes (") + ToString(bytesWritten) +
_T("(than expected: ") + ToString(bytes));
}
}
Сначала это не сработало. После некоторого поиска я обнаружил, что мне нужно инициализировать 'g_hModDll', используя' GetModuleHandle (L "mydll.dll") '. Есть ли способ перечислить «L» mydll.dll «', а не жестко кодировать его в программе? – asif
Если «mydll.dll» является обычной библиотекой Win32 C/C++, вы можете сохранить значение HMODULE (HINSTANCE) в DllMain. См. Http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583.aspx. Дайте мне знать, если вам нужна дополнительная помощь. – manuell