Проблемы с считыванием данных

Только для тех, кто пишет плагины под Total Commander. Обмен опытом, решение проблем.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Ответить
Аватара пользователя
skole
Сообщения: 162
Зарегистрирован: Чт дек 30, 2004 23:15
Откуда: Россия, Оренбург

Проблемы с считыванием данных

Сообщение skole »

При попытке считать данные о файле какого-либо плагина (комментарий или хотя бы копирайт) - в ответ получаю пустое поле, хотя по свойствам данные есть, алгоритм работает с другими типами фалов

Кто сталкивался, помогите с проблемой...
язык Delphi
beketata
Сообщения: 8
Зарегистрирован: Сб фев 26, 2005 11:41

Re: Проблемы с считыванием данных

Сообщение beketata »

skole писал(а):При попытке считать данные о файле какого-либо плагина (комментарий или хотя бы копирайт) - в ответ получаю пустое поле, хотя по свойствам данные есть, алгоритм работает с другими типами фалов

Кто сталкивался, помогите с проблемой...
язык Delphi
У меня в С++ все работает нормально.

Если используешь функцию VerQueryValue(), то обязательно нужно заполнять "lang-codepage" в строке " \StringFileInfo\lang-codepage\string-name".

Хотя странно, что с другими типами файлов твой алгоритм работает ...
Аватара пользователя
skole
Сообщения: 162
Зарегистрирован: Чт дек 30, 2004 23:15
Откуда: Россия, Оренбург

Сообщение skole »

beketata
так в том и дело, да я использую VerQueryValue() со всеми прописками, а в результате получаю только FileType...
beketata
Сообщения: 8
Зарегистрирован: Сб фев 26, 2005 11:41

Сообщение beketata »


При попытке считать данные о файле какого-либо плагина (комментарий или хотя бы копирайт) - в ответ получаю пустое поле.

... а в результате получаю только FileType...


FileType - это элемент структуры VS_FIXEDFILEINFO, в ней отсутствует "...комментарий или хотя бы копирайт" ...

Вот выдержка из MSDN:
Описание второго параметра функции VerQueryValue( , , , )

lpSubBlock
...[in] Pointer to a zero-terminated string specifying which version-information value to retrieve. The string must consist of names separated by backslashes (\) and it must have one of the following forms.
..........
\StringFileInfo\lang-codepage\string-name
Specifies a value in a language-specific StringTable structure.
..........
The string-name name must be one of the predefined strings described in the following Remarks section.
..........

А вот те самые "predefined strings":

Comments
InternalName
ProductName
CompanyName
LegalCopyright
ProductVersion
FileDescription
LegalTrademarks
PrivateBuild
FileVersion
OriginalFilename
SpecialBuild

Сначала в lpSubBlock нужно передать строку "\VarFileInfo\Translation"

struct LANGANDCODEPAGE {
WORD wLanguage;
WORD wCodePage;
} *lpTranslate;

// Read the list of languages and code pages.

VerQueryValue(pBlock,
TEXT("\\VarFileInfo\\Translation"),
(LPVOID*)&lpTranslate,
&cbTranslate);

и получив результат о lang-codepage, последовательно разбирать необходимые "predefined strings":

StringCchPrintf(SubBlock, 50,
TEXT("\\StringFileInfo\\%04x%04x\\predefined string"),
lpTranslate.wLanguage,
lpTranslate.wCodePage);

VerQueryValue(pBlock,
SubBlock,
&lpBuffer,
&dwBytes);
Аватара пользователя
skole
Сообщения: 162
Зарегистрирован: Чт дек 30, 2004 23:15
Откуда: Россия, Оренбург

Сообщение skole »

beketata
спасибо за советы, буду думать в этом направлении
Ответить