Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 183

/ вопрос открыт /

Доброго времени суток, коллеги!
С профессиональным праздником всех!

Пытаюсь получить количество элементов из ресурсов программы, но результат получается совершенно иной.
Причём, при передаче переменной как TStrings (закомментированные строки), работает всё отлично.
Помогите, пожалуйста.

Приложение:
  1. function enumResNamesProc(module: HMODULE; ResType, resName: PChar;
  2. Count: Word): Integer; stdcall;
  3. // List: TStrings): Integer; stdcall;
  4. begin
  5. Count := 15;
  6. if HiWord(Cardinal(resName)) <> 0 then List.Add(' ' + resName)
  7. else List.Add(IntToStr(LoWord(Cardinal(resName))));
  8. Result := 1;
  9. end;
  10.  
  11.  
  12.  
  13. function GetSmileCount: Word;
  14. //var ss: TStrings;
  15. begin
  16. Result := 0;
  17. {ss := TStringList.Create;
  18. if EnumResourceNames(HInstance, 'GIF', @enumResNamesProc, Integer(ss)) then
  19. Result := ss.Count;
  20. ss.Free;}
  21. EnumResourceNames(HInstance, 'GIF', @enumResNamesProc, Recult)
  22. end;


Александр Дубик Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Александр Дубик (статус: 1-ый класс)
Вопрос отправлен: 13 сентября 2009, 23:21
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 16 сентября 2009, 01:26; участников в обсуждении: 2.
Anderson N.N

Anderson N.N (статус: 2-ой класс), 15 сентября 2009, 10:25 [#1]:

Проверь сначала код ... я пометил места и попробуй снова.

function enumResNamesProc(module: HMODULE; ResType, resName: PChar;
Count: Word): Integer; stdcall;
// List: TStrings): Integer; stdcall;
begin
Count := 15;// зачем явно засовывать сюда значение?
if HiWord(Cardinal(resName)) <> 0 then List.Add(' ' + resName)
else List.Add(IntToStr(LoWord(Cardinal(resName))));
Result := 1;
end;



function GetSmileCount: Word;
//var ss: TStrings;
begin
Result := 0;
{ss := TStringList.Create;
if EnumResourceNames(HInstance, 'GIF', @enumResNamesProc, Integer(ss)) //интересное приведение типа
then
Result := ss.Count;
ss.Free;}
EnumResourceNames(HInstance, 'GIF', @enumResNamesProc, Recult)// Recult -вроде такой переменной не было
end;
Александр Дубик

Александр Дубик (статус: 1-ый класс), 16 сентября 2009, 01:26 [#2]:

Anderson N.N: спасибо за замечание.
Комментарий 1: Явно указал значение для отладки, просто сл. условие забыл закомментировать. Набирал вручную, поэтому получилось Recult, вместо Result.
Комментарий 2: Явно указал значение для отладки, просто сл. условие забыл закомментировать.

Комментарий 3: А вот приветедие типа Integer(ss) действительно интересно, ведь судя по документации там должна быть переменная, а не ссылка на неё. Но именно этот вариант как раз работает без проблем.

П.С.: Проблема состоит именно в последней переменной, передаваемой в EnumResourceNames, а числовую в виде ссылки передать не удаётся (Всё-равно возвращается значение типа: 1685234)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:35
Выполнено за 0.03 сек.