Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в CPropertySheet добавить CPropertyPage из DLL 
V
    Опции темы
DeadSoul
Дата 2.6.2006, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

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



Цитата(Bukmop @  2.6.2006,  21:35 Найти цитируемый пост)
И всё только потому, что  у меня основной проект - Static (так уж давно повелось, таковы были требования).

Не только. С моей точки зрения основная трабла была в ресурсах.


Цитата(Earnest @  2.6.2006,  17:48 Найти цитируемый пост)
но я так никогда не делала, поэтому и забыла    

 smile  


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Bukmop
Дата 2.6.2006, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 1.6.2006
Где: Москва

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



Цитата(DeadSoul @  2.6.2006,  21:44 Найти цитируемый пост)
С моей точки зрения основная трабла была в ресурсах.

В Static она так и осталась.
 
PM MAIL   Вверх
DeadSoul
Дата 2.6.2006, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

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



Цитата(Bukmop @  2.6.2006,  22:02 Найти цитируемый пост)
Цитата(DeadSoul @  2.6.2006,  21:44 )
С моей точки зрения основная трабла была в ресурсах.
В Static она так и осталась.

При статической линковки MFC-ей?

Добавлено @ 22:18 
Bukmop, ты можешь показать как победил ресурсы? Что и куда ты вписал? 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Bukmop
Дата 2.6.2006, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 1.6.2006
Где: Москва

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



DeadSoul, именно при статической линковке MFC-ей я проблему так и не решил. Теперь буду решать, продолжать биться как рыба об лёд или переписывать все ранее созданные библиотеки этого проекта на Shared DLL.

О ресурсах:
В твоём примере (как я уже упоминал) после получения в EXE-ке указателя на "CPropertyPage" из DLL-ки, принудительно поменял HINSTANCE в структуре PROPSHEETPAGE на DLL-ный.
А пример Earnest и так работает.
 
PM MAIL   Вверх
Earnest
Дата 3.6.2006, 06:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Не знаю, получится ли победить ситуацию, если оставить MFC DLL статически прилинкованной. Думаю, что нет. Там ведь в чем дело-то: в MFC есть объект (какой-то трам-пам-пам-state, который синхронизирует доступ к различным ресурсам, в том числе к ресурсам-RC, а также картам окон (т.е. HWND-CWnd) и т.д. Чтобы все работало, нужно, чтобы эта штука была в приложениии одна. Если каждый модуль будет использовать свой экземляр статически прилинкованной MFC DLL, то и этот менеджер у всех будет свой... В общем, не договорятся. Кроме того, использование статической MFC влечет за собой статический RunTime, т.е. у каждого модуля будет свой распределитель памяти, и отсюда проблемы с освобождением "чужой" памяти.
Таким образом, статическая линковка MFC подходит только для приложения, которое состоит из одного EXE. 


--------------------
...
PM   Вверх
DeadSoul
Дата 3.6.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

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



Earnest, почему в твоем примере нет проблем с ресурсами?

Цитата(Bukmop @  2.6.2006,  22:40 Найти цитируемый пост)
О ресурсах:
В твоём примере (как я уже упоминал) после получения в EXE-ке указателя на "CPropertyPage" из DLL-ки, принудительно поменял HINSTANCE в структуре PROPSHEETPAGE на DLL-ный.

В каком месте ты это менял? 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Bukmop
Дата 3.6.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 1.6.2006
Где: Москва

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



Код

void CTestExeDlg::OnBnClickedOk()
{
    HMODULE hMod=LoadLibrary(L"TestDLL");
    if ( !hMod )
    {
        AfxMessageBox(_T("Cannot load library"));
        return;
    }

    CreateNewPageFunc funcPtr=reinterpret_cast<CreateNewPageFunc>( GetProcAddress( hMod, "CreateNewPage" ) );
    if ( !funcPtr )
    {
        AfxMessageBox(_T("Cannot find function" ) );
        FreeLibrary( hMod );
        return;
    }

    CPropertyPage* page=funcPtr();
    ASSERT( page );

--->    page->m_psp.hInstance=hMod;

    CPropertySheet sheet;
    sheet.AddPage( page );
    sheet.DoModal();

    delete page;// Данное удаление неверно, нужна функция DeletePage в dll!!!

    FreeLibrary( hMod );
    // TODO: Add your control notification handler code here
    OnOK();
}
 
Строка - 21.
 

Это сообщение отредактировал(а) Bukmop - 3.6.2006, 12:48
PM MAIL   Вверх
DeadSoul
Дата 3.6.2006, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

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



Bukmop, thanks. Как-то не посмотрел, что этот мембер открытый. 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Earnest
Дата 5.6.2006, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(DeadSoul @  3.6.2006,  12:53 Найти цитируемый пост)
Earnest, почему в твоем примере нет проблем с ресурсами?

 smile  smile  smile  


--------------------
...
PM   Вверх
DeadSoul
Дата 5.6.2006, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

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



Earnest, честно говоря, хотеось бы более развернутый ответ 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Bukmop
Дата 6.6.2006, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 1.6.2006
Где: Москва

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



DeadSoul, там всё оказалось просто. Earnest использовала MFC extension DLL, а там создаётся CDynLinkLibrary и по этому AfxFindResourceHandle находит нужный ресурс.
 
PM MAIL   Вверх
Earnest
Дата 6.6.2006, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(DeadSoul @  5.6.2006,  22:33 Найти цитируемый пост)
Earnest, честно говоря, хотеось бы более развернутый ответ  

Извини, я просто не очень поняла, вопрос это или наезд  smile 

В дополнение к тому, что уже сказал Bukmop:
WinAPI, чтобы найти ресурс, нужно указать точно в каком модуле он лежит.
MFC это дело слегка скрывает: ExtensionDLL связываются в цепочку, которая хранится во внутренней глобальной переменной. Когда ты запрашиваешь ресурс, MFC проходит по цепочке, опрашивая все библиотеки по очереди, пока не найдет нужный. 

 


--------------------
...
PM   Вверх
DeadSoul
Дата 6.6.2006, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

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



BukmopEarnest, спасибо. 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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