Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Запаковать в exe ресурсы


Автор: Podarochek 9.5.2008, 12:39
подскажите пожалуйста, каким образом (если ето вообще возможно) можно "запаковать"  в исполнительный файл ресурсы которые используются в программе например рис. или файлы текстовые.

Автор: JackYF 9.5.2008, 12:44
Podarochek, темы такие в виндовый раздел, пожалуйста.

Автор: Podarochek 9.5.2008, 13:23
как теперь эту тему туда перебросить, помогите уважаемые модераторы smile 

Автор: T0ohtik 9.5.2008, 14:37
Есть такая программа называется ResHack. Или тебе надо написать аналог её?

Автор: Podarochek 9.5.2008, 23:52
нет, не написать. например, есть программы, которые предствлены одним exe, но рисунки например в этой проге тоже есть. каким образом написав программу с такими ресурсами запихнуть все в один exe

Автор: T0ohtik 10.5.2008, 10:47
Ну да эту тему надо в WinApi или MFC. А вообще тебе надо прочитать Петзольда "Программирование для Windows95" т1. ч3 "Использование ресурсов"

Автор: bsa 11.5.2008, 20:01
Podarochek, упаковкой ресурсов в исполняемый файл или динамическую библиотеку производит линковщик (tlink.exe, например, у borland) на этапе линковки, если не ошибаюсь. В качестве ресурсов ему надо подсунуть скомпилированный ресурсный файл (*.res), который создается из текстового ресурсного файла (*.rc) компилятором ресурсов.

Автор: Uliana 23.5.2008, 11:46
Вот я недавно делала єто так:

только мене надо было изменить VERSION_INFO

Код


hExe = LoadLibrary( "mod1.exe" ); //модуль с которого ты береш ресурс
            if ( hExe == NULL )
            {
                MessageBox( hDlgChange, _T("Could not load exe.!"),
                            _T("Error"), MB_OK );
                        return FALSE;
            }
hRes = FindResource( hExe, MAKEINTRESOURCE(VS_VERSION_INFO), RT_VERSION );//
        if ( hRes == NULL )
        {
            MessageBox( hDlgChange, _T("Could not find resource.!"),
            _T("Error"), MB_OK );
            return FALSE;
        }
hResLoad = LoadResource( hExe, hRes );
        if ( hResLoad == NULL )
        {
            MessageBox( hDlgChange, _T("Could not load resource.!"),
            _T("Error"), MB_OK );
            return FALSE;
        }
lpResLock = LockResource( hResLoad );
    if ( lpResLock == NULL )
        {
            MessageBox( hDlgChange, _T("Could not lock.!"),
            _T("Error"), MB_OK );
            return FALSE;
        }
hUpdateRes = BeginUpdateResource( "mod2.exe", FALSE ); //а это тот, где надо изменить
    if ( hUpdateRes == NULL )
        {
            MessageBox( hDlgChange, _T("Could not be update!"),
            _T("Error"), MB_OK );
            return FALSE;
        }

result = UpdateResource( hUpdateRes,            // update resource handle 
    RT_VERSION,                                    // change version resource 
    MAKEINTRESOURCE(VS_VERSION_INFO),            // version name 
    MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),    // neutral language
    lpResLock,                                    // ptr to resource info 
    SizeofResource(hExe, hRes));                // size of resource info. 
if ( result == FALSE )
    {
        MessageBox( hDlgChange, _T("Could not update resource!"),
        _T("Error"), MB_OK );
        return FALSE;
    }
            
if (!EndUpdateResource(hUpdateRes, FALSE))
    {
        MessageBox( hDlgChange, _T("Could not write changes to file!"),
        _T("Error"), MB_OK );
        return FALSE;
    }
if (!FreeLibrary(hExe))
    {
        MessageBox( hDlgChange, _T("Could not free executable!"),
        _T("Error"), MB_OK );
        return FALSE;
    }


      

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)