Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
1 / 1 / 1
Регистрация: 06.07.2011
Сообщений: 24
1

Ресурсы

11.07.2011, 00:41. Просмотров 3167. Ответов 3
Метки нет (Все метки)


Здравствуйте, уважаемые форумовчане!

Строки в ресурсах .rc
Как правильно поместить строку в ресурс? Через StringTable?
А самое главное, как его считать? Можно ли хранить чистые числа (не строки)?

Собственно есть функция:
C++
1
2
3
4
5
6
int WINAPI LoadString(
  __in_opt  HINSTANCE hInstance,
  __in      UINT uID,
  __out     LPTSTR lpBuffer,
  __in      int nBufferMax
);
Но что за дескриптор hInstance?

Можно пример извлечения строки?

Вообще говоря необходимо хранить несколько глобальных переменных,
но объявить их в лоб не получается, ибо даже #pragma once
не спасает от дублирования.

Без парочки глобальных очень сложно/(не красиво) обойтись.

Есть ещё такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//Получаем хэндл модуля (исполняемого файла, *.exe или *.dll), в 
    // котором лежит ресурс. NULL означает модуль, ассоциированный
    //с текущим процессом, хотя в этом случае можно сразу вызывать
    //FindResource, передавая первым параметром NULL,
    // а под VCL можно использовать глобальную HInstance
    HMODULE hMod=GetModuleHandle(NULL);
    // если ресурс лежит в другом файле, то параметр для GetModuleHandle
    // можно получить с помощью LoadLibrary(...);
    if(!hMod) {
      //Обработка ошибки
    } 
    //Получаем дескриптор информационного блока нашего ресурса 
    HRSRC hRes=FindResource(hMod,L"IDS_STRING109",RT_RCDATA);
    //Если ResurceName не было определено как число, то ResurceName 
    //берется в кавычках. Иначе надо (LPSTR)ResurceName
    //Если тип ресурса был задан как WAVE, то последний параметр должен
    // быть "WAVE" - в кавычках!
    if(!hRes){
      //Обработка ошибки
    }
    //Теперь загружаем ресурс в память, получая дескриптор загру-
    //женного блока памяти.
    HGLOBAL hGlob=LoadResource(hMod,hRes);
    //Опять же, для ресурса в "текущем" модуле, первым параметром можно
    //передавать NULL
    if(!hGlob) {
      //Обработка ошибки
    }
    //И, наконец, последнее - получаем указатель на начало массива
    BYTE *lpbArray=(BYTE*)LockResource(hGlob); 
    if(!lpbArray) {
      //Обработка ошибки
    }
Это для неких обобщённых ресурсов?
Можно и строку получить? (однако так слишком громоздко для строки)

С уважением, Александр!

Добавлено через 22 минуты
У меня такая задача.
Я работаю через Win32 App FORM с OpenGL
Есть функция обрабатывающая события.
В ней меняется значение переменной.
Необходимо чтобы эта переменная влияла на отрисовку, т.е. надо передать её в функцию Display()

У меня функции лежать в одном файле, а main в другом.
Возможно ли вообще разнести по разным файлам функции?
Не хочется всё в один файл лепить
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.07.2011, 00:41
Ответы с готовыми решениями:

Многопоточность для Windows. Ресурсы языка программирования vs Ресурсы WinAPI
Добрый день. Подскажите пож-та, если пишется многопоточное приложение для Windows например на...

Ресурсы и mciSendString
Господа допустим имеем в ресурсах файл .mp3 можно ли его как то воспроизвести через mciSendString...

Подключение манифеста. Ресурсы
Сколько инфы не читал, а толкового, походу, не нашёл. Почему? Да потому что в одном варианте нужно...

Основная форма и ресурсы
1. Возможно ли создать GUI основной формы в файле ресурсов? Читал MSDN, никакой информации не...

3
бжни
2472 / 1681 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
11.07.2011, 01:06 2
Цитата Сообщение от Alx Посмотреть сообщение
Но что за дескриптор hInstance?
дескриптор процесса, ресурсы которого надо считать
если 0 - дескриптор текущего модуля
можно получать через GetModuleFileName ресурсы незагруженных модулей

Цитата Сообщение от Alx Посмотреть сообщение
Это для неких обобщённых ресурсов?
на http://msdn.microsoft.com/en-u... s.85).aspx
указана функция LoadString

причем тут вообще файлы и глобальные переменные?
0
1 / 1 / 1
Регистрация: 06.07.2011
Сообщений: 24
11.07.2011, 01:51  [ТС] 3
Цитата Сообщение от alex_x_x Посмотреть сообщение
указана функция LoadString

Да, я знаю, я от туда вообще - то её описание и привёл.

Цитата Сообщение от alex_x_x Посмотреть сообщение
причем тут вообще файлы и глобальные переменные?
Я не хочу размещать весь код в одном файле.
В примерах OpenGL обычно используются глобальные переменные.
Я Сделел файл с точкой входа, хедер и пару файлов с функциями.
Тут возникла проблема с объявлением глобальных переменных.
Выход нахожу в использовании ресурсов.

Так можно пример извлечения строки? (мне не понятно, как передать название "файла" ResName.rc функции, которая будет брать из него строку)
0
бжни
2472 / 1681 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
11.07.2011, 02:00 4
Цитата Сообщение от Alx Посмотреть сообщение
Тут возникла проблема с объявлением глобальных переменных.
Выход нахожу в использовании ресурсов.
ненене
все просто

C++
1
2
// global.cpp
int g_a;
C++
1
2
// global.h
extern int g_a;
C++
1
2
3
4
// another.cpp
#include "global.h"
...
int b = g_a * 10;
читайте про extern, глобальные переменные итд
ресурсы тут совершенно не при чем
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2011, 02:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Добавление манифеста в ресурсы
Приветствую. Помогите разобраться как правильно в ресурсы программы поместить файл манифеста, дабы...

Ресурсы: курсоры, иконки
Есть у меня два файла "cursor1.cur", "icon1.ico"... пользуюсь я VS 2015... как мне правильно...

Ресурсы: получить название файла по ID ресурса
Господа у меня в рессурсах лежит некий файл , допустим запись выглядит так - #define IDR_PIC ...

Можно ли загружать иконки и картинки, не используя ресурсы?
Можно ли как то загружать иконки и картинки не используя ресурсы? например в функции...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.