Re[6]: Программно изменить коментрарии к версии
От: Аноним  
Дата: 30.08.06 06:31
Оценка:
Здравствуйте, McQwerty, Вы писали:

А>>У Вас есть функции для замены.

А>>А как добавить новый комментарий к версии файла?
А>>Существует ли реализация этой футкции?
А>>Если есть сообщите пожалуйста.

MQ>Да. Это возможно.

MQ>Все строки, которые будут записаны в ресурсы, содержатся в массиве m_Childs
MQ>класса VVersionInfo. Соответственно, если в этот массив добавить ещё один
MQ>элемент, то при выполнении функции Compile, он будет добавлен в ресурсы.

MQ>Сделать это можно примерно так:

MQ>VVersionInfo ver (pVer);
MQ>ver. m_Childs. Add (new VVersionInfo ("NewStr", "NewVal"));

MQ>Конструктор от двух строк для VVersionInfo придётся добавить самому — у

MQ>меня его нет.

Спасибо за ответ.

Коструктор VVersionInfo имеет следующую реализацию

VVersionInfo::VVersionInfo (const LPVOID pMemoryLocation, DWORD nLevel)
{
    LPBYTE pTemp = (LPBYTE) pMemoryLocation;
    m_pInfo = new VCommonVersionInfo (pMemoryLocation, nLevel);
    INT dwSizeRest = m_pInfo -> ChildSize ();
    pTemp += m_pInfo -> Size ();

    while (dwSizeRest > 0)
    {
        VVersionInfo* pChild = new VVersionInfo (pTemp, nLevel + 1);
        m_Childs. push_back (pChild);
        DWORD dwItemSize = pChild -> Size ();
        pTemp += dwItemSize;
        dwSizeRest -= dwItemSize;

        if (dwSizeRest < 0)
        {
            dwSizeRest = 0;
        }
    }
} // VVersionInfo::VVersionInfo


я попробовал сделать еще один конструктор


VVersionInfo::VVersionInfo (LPWSTR m_pszKey ,LPWSTR m_psValue,  DWORD nLevel)
{
    m_pInfo = new VCommonVersionInfo (m_pszKey,m_psValue, nLevel);
    INT dwSizeRest = m_pInfo -> ChildSize ();
}


VVersionInfo::VCommonVersionInfo::VCommonVersionInfo (LPWSTR pszKey, LPWSTR pszValue,DWORD nLevel)
{
   
    //const LPBYTE pTemp = (LPBYTE) pMemoryLocation;

    m_nSize = 0;
    m_nLevel = nLevel;

    m_wLength = (wcslen (pszKey) + 1) + (wcslen (pszValue) + 1);
    m_nSize += sizeof (WORD);
    m_wValueLength = (wcslen (pszValue) + 1);   
    m_nSize += sizeof (WORD);
    m_wType =  1;  //string data         
    m_nSize += sizeof (WORD);

    //m_wLength = * ((LPWORD) (pTemp + m_nSize));
    //m_nSize += sizeof (WORD);
    //m_wValueLength = * ((LPWORD) (pTemp + m_nSize));   
    //m_nSize += sizeof (WORD);
    //m_wType =  * ((LPWORD) (pTemp + m_nSize));           
    //m_nSize += sizeof (WORD);

    m_pszKey = pszKey;
    m_nSize += (wcslen (m_pszKey) + 1) * sizeof (WCHAR);

    m_nSize += (4 - m_nSize) & 3;    // âûðàâíèâàíèå íà 32 áèòà

    DWORD dwFactor = (m_nLevel == 3) ? sizeof (WORD) : 1;
    m_Value. Assign ((LPBYTE)pszValue,wcslen (pszValue) + 1);
    m_nSize += m_wValueLength * dwFactor;
   
    m_nSize += (4 - m_nSize) & 3;    // âûðàâíèâàíèå íà 32 áèòà
   
} // VVersionInfo::VCommonVersionInfo::VCommonVersionInfo


и

VVersionInfo* verN=new VVersionInfo(L"SNP",L" 1.20.0",2);
ver.m_Childs.push_back(verN);
Но в такой реализации не работает.

Вопрос в следующем:
какого должно быть значение nLevel
и какие значения должны принимать члены класса VCommonVersionInfo в такой реализации.

Буду очень признателен за помощь.

Алексан.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.