Странное исчезновение текста в диалоге в консольном апп

Тема в разделе "WASM.WIN32", создана пользователем liss, 28 фев 2005.

  1. liss

    liss New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    25
    Всем привет! У меня возникла такая проблема: Если попытаться загрузить и отгрузить длл'ку, содержащую ресурсы диалога а потом опять заново ее загрузить и попытаться вызвать оттуда функцию типа DialogBoxParam(которая создаёт диалог из ресурса), то на появившемся диалоге не будет отображаться текст, в том числе и на кнопках!

    Все это происходит в CUI приложении. В оконном приложениее всё ОК. Кто - нибудь сталкивался с этой проблемой???



    P.S. Воспроизвести проблему можно и при помощи мессадж бокса. Вот так(расскомментируйте LoadLibrary/FreeLibrary, чтобы увидеть результат!!!):



    -----------------------------client.cpp--------------------

    #include <windows.h>



    typedef int (WINAPI * p_msgbox)(HWND hWnd,

    LPCTSTR lpText,

    LPCTSTR lpCaption,

    UINT uType);



    void main()

    {

    HINSTANCE h;



    //h = ::LoadLibrary("user32.dll");

    //::FreeLibrary(h);



    h = ::LoadLibrary("user32.dll");

    p_msgbox msgbox = (p_msgbox)::GetProcAddress(h, "MessageBoxA");

    msgbox(NULL, "Title", "Content", MB_YESNO);

    ::FreeLibrary(h);

    }

    -----------------------------client.cpp--------------------
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Если нижеприведенный код аналогичен сишному, то воспроизвести проблему не удалось, месаджбокс отображается нормально
    Код (Text):
    1. ;===============================================
    2. format      pe console
    3. include     '%fasminc%\win32a.inc'
    4. ;===============================================
    5. l           db      'user32.dll',0
    6. f           db      'MessageBoxA',0
    7. ;===============================================
    8. entry       $
    9.             invoke  LoadLibrary,l
    10.             invoke  FreeLibrary,eax
    11.             invoke  LoadLibrary,l
    12.             invoke  GetProcAddress,eax,f
    13.             stdcall eax,0,f,l,MB_ICONINFORMATION
    14.             invoke  ExitProcess,0
    15. ;===============================================
    16. data        import
    17. library     kernel32,'kernel32.dll'
    18. include     '%fasminc%\apia\kernel32.inc'
    19. end         data
    20. ;===============================================
     
  3. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Кстати, у меня win2k и FreeLibrary не оказывает никакого воздействия на user32.dll, т.е. его не выгружает, такое тоже работает
    Код (Text):
    1. entry       $
    2.             invoke  LoadLibrary,l
    3.             mov     esi,eax
    4.             invoke  GetProcAddress,eax,f
    5.             push    eax
    6.             invoke  FreeLibrary,esi
    7.             pop     eax
    8.             stdcall eax,0,f,l,MB_ICONINFORMATION
     
  4. liss

    liss New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    25
    2bogrus:

    Что значет "месаджбокс отображается нормально"? Ты видишь иконку??!! У тебя проставлено MB_ICONINFORMATION, т.е. показать значок в боксе. А текст получилось увидеть? Под win2k также не работает. Забыл сказать, тестируеммая система Windows XP SP1
     
  5. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    У меня w2ksp4ru, все отображается нормально и иконка и текст и MB_YESNO, смотри у себя в отладчике

    [​IMG] _992939393__msgbox.exe
     
  6. Funbit

    Funbit Member

    Публикаций:
    0
    Регистрация:
    13 апр 2003
    Сообщения:
    92
    Адрес:
    Russia
    WinXP SP1, ни текста, ни иконки :)
     
  7. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    bogrus

    w2ksp4 & wxpsp2 текст не отображается ни в твоем коде ни в коде из первого поста, хотя сам статик и его caption msspy++ показывает.
     
  8. liss

    liss New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    25
    Потестил на WinXPSP1EN, WinXPSP2RU(MUI), Win2000AdvancedSP4En и WinXP2000SP2En. Везде один и тот же пустой диалог кроме последней винды, там все ок. Как такое может быть? Что является причиной этого :)
     
  9. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    q_q




    У меня русская w2ksp4, версия user32.dll (Библиотека клиента USER API Windows 2000) - 5.0.2195.6688, полет нормальный :)

    [​IMG]

    [​IMG] 540008103__msgbug.png
     
  10. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    liss Проверьте в оллидбг, выгружается ли user32.dll после FreeLibrary (у меня нет), возможно проблема именно в этом
     
  11. liss

    liss New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    25
    Резюмируя скажу, что на некоторых системах работает нормально, на некоторых - нет. Вопрос почему такое поведение, остается открытым...
     
  12. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    bogrus

    Я пробовал на w2ksp4ru user32.dll 5.00.2195.6897.



    выгружается ли user32.dll после FreeLibrary

    На wxpsp2 выгружается и загружается внешне нормально, т.е. в комплекте с GDI32.DLL.
     
  13. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    Хе, wxpsp2 глюк есть.

    Предполагаю, что нельзя допускать выгрузки gdi32.dll

    Если вначале поставить h = ::LoadLibrary("gdi32.dll"); то все в норме, любая другая независящая от gdi32.dll не катит.

    Может гуру объяснят в чем точно дело...