Сейчас на форуме: UniSoft, _MBK_, laslo (+10 невидимых)

 eXeL@B —› Программирование —› FileOpenDialog из инжекченной DLL
Посл.ответ Сообщение

Ранг: 590.6 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 29 апреля 2011 13:51
· Личное сообщение · #1

Собственно, что есть.
Через CreateRemoteThread инжектится DLL (MFC) - LoadLibrary.
Инициализирую MFC, создаю окошко, по кнопке пытаюсь открыть диалог выбора файла. (можно и без окошка - результат тот же). И вот тут приложение намертво зависает.
Пытался как через MFC CFileOpenDialog так и через WinAPI GetOpenFileName. Код функции выбора файла оттестирован в приложении - работает отлично. А вот в DLL не хочет.

Такое впечатление что не создается окно.
Что поправить нужно для нормальной работы?

-----
старый пень





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 29 апреля 2011 14:02
· Личное сообщение · #2

Надеюсь, не с точки входа длл вызывается?

| Сообщение посчитали полезным: r_e

Ранг: 590.6 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 29 апреля 2011 14:17
· Личное сообщение · #3

Хз по поводу точки входа. Но мысль интересная.
Как-то так:
Inject -> DllMain -> static_constructors -> CMfcDllApp theApp;
BOOL CShellDllApp::InitInstance()
СMyDialog::DoModal();
...
void CMyDialog::OnBnClickedOk()
OpenFile

Вероятно, DoModal блокирует DllMain.

-----
старый пень





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 29 апреля 2011 14:20
· Личное сообщение · #4

Погляди мсдн, оттуда многие вещи вызывать не рекомендуется, переделывай код, чтобы вызывалось из другого места.
http://msdn.microsoft.com/en-us/library/ms682583(v=vs.85).aspx
Warning There are serious limits on what you can do in a DLL entry point.
Calling functions that require DLLs other than Kernel32.dll may result in problems that are difficult to diagnose.




Ранг: 590.6 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 29 апреля 2011 14:22
· Личное сообщение · #5

Да, спасиб. Вынес GUI в другой поток - все заработало.

-----
старый пень





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 29 апреля 2011 14:40
· Личное сообщение · #6

Тогда можно закрыть, полагаю.


 eXeL@B —› Программирование —› FileOpenDialog из инжекченной DLL
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати