Поиск:

Ответ в темуСоздание новой темы Создание опроса
> LoadString строки из другого проекта 
:(
    Опции темы
NiJazz
  Дата 26.7.2005, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 2
Всего: 23



Например, есть два MFC-приложения. В одном из них есть String Table со строками и идентификаторами. Как можно строки этого ресурса использовать в другом проекте?
Добавлено @ 10:13
Ну разумеется, что второй проект поддерживает MFC и всё необходимое.
PM MAIL   Вверх
Coocky
Дата 26.7.2005, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



NiJazz
Да никак, сорей всего, как ты к таблице другой достучишься?
Или я не понял вопрос-тебе перенести в свою надо или работать с чужой??


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
chaos
Дата 26.7.2005, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 4
Всего: 44



все просто) см. пример
Код

#include <stdio.h>
#include <windows.h>
#include "./2/resource.h"

int main(int argc, char* argv[])
{
    HINSTANCE hInst = ::LoadLibrary(".\\2\\debug\\2.exe");
    if (NULL == hInst)
    {
        printf("Error load library\n");
        return 0;
    }

    char str1[100], str2[100];
    ::LoadString(hInst, IDS_STRING1, str1, 100);
    printf("String1 = %s\n", str1);
    ::LoadString(hInst, IDS_STRING2, str2, 100);
    printf("String2 = %s\n", str2);

    ::FreeLibrary(hInst);

    return 0;
}

поясняю: у тебя есть пирложение и допустим ты знаешь идентификаторы строк(те у тебя есть resource.h), ну а осьтальное думаю все понятно

PM WWW   Вверх
chaos
Дата 26.7.2005, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 4
Всего: 44



но это только при знании идентификаторов ресурсов
PM WWW   Вверх
Coocky
Дата 26.7.2005, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



chaos
А ну-ка обьясни, что ты делаешь-загружаешь таблицу и читаешь из нее строки?
Хм...
Надо справочник по API функциям купить smile


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
chaos
Дата 26.7.2005, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 4
Всего: 44



сдесь я делаю: зная какие есть идентификаторы строк в программе(имею resource.h ее) я загружаю строки по их идентификатору. так! но может это не то что нужно автору топика smile
PM WWW   Вверх
Coocky
Дата 26.7.2005, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



chaos
Я вообще не пойму, зачем такое, если можно просто скопи-пастить в свою таблицу..
Ну ладно, если прийдет. пусть скажет..
А пример вообще интересный.


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
chaos
Дата 26.7.2005, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 4
Всего: 44



Цитата(Coocky @ 26.7.2005, 11:20)
chaos
Я вообще не пойму, зачем такое, если можно просто скопи-пастить в свою таблицу..
Ну ладно, если прийдет. пусть скажет..
А пример вообще интересный.

а вдруг у кого-то есть exe и resource.h и больше ни чего, тогда таким макаром можно дергать строчки smile
PM WWW   Вверх
NiJazz
Дата 26.7.2005, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 2
Всего: 23



Coocky
Цитата
если можно просто скопи-пастить в свою таблицу..

Можно, но нетехнологично.
Добавлено @ 17:23
chaos
Спасибо, я думаю, что метод работающий. То есть берем бинарник, извлекаем нужный ресурс и пользуемся им.
Но мне бы хотелось пользоваться строками из rc-файла, а не скомпонованного бинарника, так как эти два проекта в одном решении. А сидеть и копировать таблицу я бы не хотел, к тому же так могут быть ошибки (так как работа копипастера слишком машинальная).
PM MAIL   Вверх
Coocky
Дата 26.7.2005, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



NiJazz
Ну, дык , работает пример chaos_а?

Добавлено @ 17:25
Дык прочитать можно-то файл?
Цитата

STRINGTABLE
BEGIN
    ID_INDICATOR_EXT        "EXT"
    ID_INDICATOR_CAPS      "CAP"
    ID_INDICATOR_NUM        "NUM"
    ID_INDICATOR_SCRL      "SCRL"
    ID_INDICATOR_OVR        "OVR"
    ID_INDICATOR_REC        "REC"
END

Вот из rc файла строка из таблицы...


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Earnest
Дата 26.7.2005, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(NiJazz @ 26.7.2005, 17:18)
То есть берем бинарник, извлекаем нужный ресурс и пользуемся им.

Все правильно, метод точно работает. Только грузить библиотеку\exe надо через LoadLibraryEx с флагом DONT_RESOLVE_DLL_REFERENCES или LOAD_LIBRARY_AS_DATAFILE. Иначе она попробует разрешить все свои связи, а оно вам надо? Может и не получиться. Список ресурсов потом можно получить через разнообразные функции EnumResourseXXX, а конкретный ресурс - через LoadString, LoadIcon, etc.

Цитата(NiJazz @ 26.7.2005, 17:18)
Но мне бы хотелось пользоваться строками из rc-файла, а не скомпонованного бинарника, так как эти два проекта в одном решении

Если два проекта (EXE) разделяют ресурсы - самое разумное вынести эти ресурсы в отдельную DLL и подключить ее к обоим проектам.
Если общие ресурсы засунуть в MFC-extension DLL, то MFC приложение и само все найдет, нужно только позаботиться о разделении пулов идентитфикаторов. Потому как код MFC, например CWinApp::LoadString, ищет сначала нужный ресурс в заданном модуле (по-умолчанию - exe модуль), а потом по всей цепочке extension DLL. У кого первого найдет, того и тапки.



--------------------
...
PM   Вверх
chaos
Дата 27.7.2005, 06:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 4
Всего: 44



сдесь вот тоже чето подобное обсуждается
http://forum.vingrad.ru/index.php?showtopi...ad=#entry477039
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0512 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.