Menu, Создание динамического меню.

Тема в разделе "WASM.WIN32", создана пользователем Andrey_59, 25 май 2023.

  1. Andrey_59

    Andrey_59 Member

    Публикаций:
    0
    Регистрация:
    20 фев 2021
    Сообщения:
    81
    Зачем? Я так понимаю оно, выравнивание нужно только при нечётном количестве букв, а где это написано, откуда я должен об этом узнать...

    строки 47-51 зачем нужны, где они отображены или это опять какое-то выравнивание?

    НО до этого сообщения, почему то, данное уточнение отсутствовало, мелочь, не думаю.

    Ну, теперь собралось, но строка меню не отображается.
     
  2. MaKsIm

    MaKsIm Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    94
    Посмотреть на картинку и найти вот это на ней так сложно. Это строки 47 - 51
    Screenshot_20230531_154050.png

    Или откуда вы эти строки читаете? Я приводил уже 4 примера. Тогда процитируйте строки, на которые ссылаетесь...

    Попробуйте прочитать мой пример. Там все описано предельно понятно и в дальнейших комментариях не нуждается.
     
  3. Andrey_59

    Andrey_59 Member

    Публикаций:
    0
    Регистрация:
    20 фев 2021
    Сообщения:
    81


    1. Где такое в пунктах меню...
    Я попробовал прочитать ваш код и не нашёл в нём чего то сверхъестественного из чего и возникает вопрос, почему мой код не работает, он ведь почти что один в один как тот, что привели вы. И ещё, если понадобиться решить что-то подобное, мне что ваш код применять...
     
  4. MaKsIm

    MaKsIm Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    94
    Так картинки по коду на C++ я не делал. Там больше пунктов, чем в примере на ASM. Это сможете увидеть когда запустите у себя мой код. Будет точно такое же вложенное меню как в пункте Help.

    Ну можете взять функцию из моего кода для заполнения блока описания меню
    Код (C++):
    1.  
    2. MENUEX_TEMPLATE_ITEM *FillMenuItemTemplate(MENUEX_TEMPLATE_ITEM *lpmti,
    3.   DWORD aType, DWORD aState,
    4.   DWORD aID,  WORD aFlags,
    5.   LPCWSTR szText) {
    6.   int flag  = (aFlags & 1) ? 4 : 0;
    7.   lpmti->dwType  = aType;
    8.   lpmti->dwState  = aState;
    9.   lpmti->uId  = aID;
    10.   lpmti->wFlags  = aFlags;
    11.   WCHAR *szDst  = &lpmti->szText[0];
    12.   const WCHAR *szSrc = szText;
    13.   for (; *szDst++  = *szSrc++; flag ^= 2);
    14.   if (aFlags & 1) *(DWORD *)szDst = 0;
    15.   return (MENUEX_TEMPLATE_ITEM *)(((BYTE *)szDst) + flag);
    16. }
    Если допишите к ней inline то будет делать тоже самое...
    --- Сообщение объединено, 1 июн 2023 ---
    Тогда может попробуете набросать свой короткий пример и выложить его сюда, чтобы можно было его откомпилировать и посмотреть разницу в отладчике.
     
  5. Andrey_59

    Andrey_59 Member

    Публикаций:
    0
    Регистрация:
    20 фев 2021
    Сообщения:
    81
    Я понять не могу, почему у меня не получается, тут нужно заполнить структуры и всё, что сложного, но нет что-то идёт не так, но что понять не могу, эта тема меня, если честно, уже утомила, если не всё так просто, то почему нет толкового и развёрнутого описания.
    У меня вот что получается.

    [​IMG]
     

    Вложения:

    • menu.png
      menu.png
      Размер файла:
      4,8 КБ
      Просмотров:
      126
    • menu.png
      menu.png
      Размер файла:
      4,8 КБ
      Просмотров:
      391
  6. MaKsIm

    MaKsIm Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    94
    Очень похоже на то, что макрос TEXT у вас не создаёт Unicode строку из wchar_t. А в структурах, даже при вызове LoadMenuIndirectA, должны быть строки из wchar_t символов.
     
  7. Andrey_59

    Andrey_59 Member

    Публикаций:
    0
    Регистрация:
    20 фев 2021
    Сообщения:
    81
    Ну этот макрос не я писал так что тут претензии не ко мне, но как он может не создавать Unicode строку там же альтернативы нет.
    Но почему то, что должно быть пунктом меню, отображается справа, а не так как обычно слева?
     
  8. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Он разворачивается или в LPCSTR или в LPCWSTR в зависимости от того, определена ли константа UNICODE. Проверь в свойствах проекта, что он юникодный.
     
  9. Andrey_59

    Andrey_59 Member

    Публикаций:
    0
    Регистрация:
    20 фев 2021
    Сообщения:
    81
    Набор символов: Использовать набор символов Unicode.
     
  10. MaKsIm

    MaKsIm Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    94
    Тогда могу посоветовать либо найти этот блок памяти в отладчике и посмотреть на его содержимое перед вызовом функции LoadMenuIndirect, либо сохраните блок в файле и посмотрите в hex редакторе.

    Или все же набросайте маленький исходник и выложите сюда вместе с бинарником, чтобы можно было оценить разницу.
     
  11. Andrey_59

    Andrey_59 Member

    Публикаций:
    0
    Регистрация:
    20 фев 2021
    Сообщения:
    81
    Судя по отладчику в Visual studio
     

    Вложения:

    • menu1.png
      menu1.png
      Размер файла:
      8,5 КБ
      Просмотров:
      140
  12. Andrey_59

    Andrey_59 Member

    Публикаций:
    0
    Регистрация:
    20 фев 2021
    Сообщения:
    81
    Я так и не понял, в каких случаях нужно выравнивать данные, а при каких нет... Если при копировании символов помимо отображаемых символов так же копируется символ конца строки(нуль терминал), он включается в выравнивание т.е., когда происходит разбор(парсинг) данной структуры где то в недрах windows, то просматривая метки, что это POPUP ИЛИ обычная трока меню, то, я так понял, при этом парсинге каждый объект отделяется ещё и определённым количеством нулей в конце каждого пункта, так ли?
    Скрин для наглядности прилагаю, забил нужные поля структур значениями 0xff для наглядности, всего два пункта FILE - POPUP, Exit - строка меню в этом пункте меню.
    --- Сообщение объединено, 3 июн 2023 ---
    Так ещё скрин участка памяти, куда загружены две структуры.
     

    Вложения:

    • menu2.png
      menu2.png
      Размер файла:
      9 КБ
      Просмотров:
      122
    • menu4.png
      menu4.png
      Размер файла:
      52,3 КБ
      Просмотров:
      124
  13. MaKsIm

    MaKsIm Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    94
    С выравниванием все просто. Адрес следующей структуры должен всегда начинаться со значения кратного 4 (тоже относится и к полю после строки текста, если добавляется подменю)
    Терминирующий 0 это тоже данные строки и его тоже надо учитывать при вычислении адреса.

    Если файл это подменю, тогда после его структуры должно быть ещё одно поле, адрес которого должен начинаться с числа кратного 4-м.
    --- Сообщение объединено, 4 июн 2023 ---
    Screenshot_20230604_010159.png

    В начале идёт структура MENUEX_TEMPLATE_HEADER (3 поля и занимают 8 байт)
    После неё идёт 3 структуры (добавил ещё одну т.к. в вашем примере не видно выравнивания т.к. все строки одинаковой длины)
    Желтым: поле Type; Синим: поле State; Красным: поле ID; без выделения: поле Flags; Розовым: поле Text[n].
    Как видно: после поля Text в структуре пункта FILE идёт ещё одно поле (4 байта). Это не выравнивание. Данные 4 байта появляются после каждой структуры, у которой в поле Flags & 1 != 0.
    А вот после структуры пункта New действительно есть выравнивающие 2 байта. Т.к. в Windows принято, чтобы 2-байтовые значения (word) располагались по адресам кратным 2-м, 4-х байтовые значения - кратно 4-м и т.д. Первое поле в структуре MENUEX_TEMPLATE_ITEM это 4-х байтовое значение и поэтому структура должна начинаться с адреса кратного 4-м. Выравнивание возникает, когда строка оканчивается на кратном 2-м адресе (0-терминатор записан по адресу кратному 4-м). 4-х байтовое дополнительное поле между структурами описывающими подменю также должно начинаться с адреса кратного 4-м и выравнивание будет сразу после 0 терминатора строки, а не после этого 4-х байтового поля.

    Вкратце как-то так...
    --- Сообщение объединено, 4 июн 2023 ---
    На последней моей катринке с изображением меню были структуры составленные на FASM. Раз вы не понимаете ассемблер, то я откомпилировал те структуры и поместил в конце комментарий с ними в HEX формате.
    Код (ASM):
    1. MFT_STRING  = 0
    2. MFS_ENABLED  = 0
    3. CM_FILE_NEW  = 256
    4. CM_FILE_QUIT = 257
    5. CM_FILE_HELP = 258
    6. main.mainMenu  dw 1, 4  ; MENUEX_TEMPLATE_HEADER
    7.   dd 0
    8.  
    9.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    10.   dd MFS_ENABLED
    11.   dd 0
    12.   dw 0x01
    13.   du "File", 0
    14.   dd 0 ; <<< Дополнительное поле
    15.  
    16.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    17.   dd MFS_ENABLED
    18.   dd CM_FILE_NEW
    19.   dw 0x00
    20.   du "New", 0, 0
    21.  
    22.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    23.   dd MFS_ENABLED
    24.   dd CM_FILE_NEW
    25.   dw 0x00
    26.   du "Open...", 0, 0
    27.  
    28.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    29.   dd MFS_ENABLED
    30.   dd CM_FILE_NEW
    31.   dw 0x00
    32.   du "Save...", 0, 0
    33.  
    34.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    35.   dd MFS_ENABLED
    36.   dd CM_FILE_NEW
    37.   dw 0x00
    38.   du "Save as...", 0
    39.  
    40.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    41.   dd MFS_ENABLED
    42.   dd CM_FILE_QUIT
    43.   dw 0x80
    44.   du "Exit", 0
    45.  
    46.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    47.   dd MFS_ENABLED
    48.   dd CM_FILE_HELP
    49.   dw 0x01
    50.   du "Edit", 0
    51.   dd 0 ; <<< Дополнительное поле
    52.  
    53.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    54.   dd MFS_ENABLED
    55.   dd CM_FILE_HELP
    56.   dw 0x00
    57.   du "Redo", 0
    58.  
    59.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    60.   dd MFS_ENABLED
    61.   dd CM_FILE_HELP
    62.   dw 0x00
    63.   du "Undo", 0
    64.  
    65.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    66.   dd MFS_ENABLED
    67.   dd CM_FILE_HELP
    68.   dw 0x00
    69.   du "Cut", 0, 0
    70.  
    71.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    72.   dd MFS_ENABLED
    73.   dd CM_FILE_HELP
    74.   dw 0x00
    75.   du "Copy", 0
    76.  
    77.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    78.   dd MFS_ENABLED
    79.   dd CM_FILE_HELP
    80.   dw 0x00
    81.   du "Paste", 0, 0
    82.  
    83.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    84.   dd MFS_ENABLED
    85.   dd CM_FILE_HELP
    86.   dw 0x00
    87.   du "Remove", 0
    88.  
    89.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    90.   dd MFS_ENABLED
    91.   dd CM_FILE_HELP
    92.   dw 0x80
    93.   du "Select all", 0
    94.  
    95.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    96.   dd MFS_ENABLED
    97.   dd CM_FILE_HELP
    98.   dw 0x81
    99.   du "?", 0, 0
    100.   dd 0 ; <<< Дополнительное поле
    101.  
    102.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    103.   dd MFS_ENABLED
    104.   dd CM_FILE_HELP
    105.   dw 0x01
    106.   du "Help", 0
    107.   dd 0 ; <<< Дополнительное поле
    108.  
    109.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    110.   dd MFS_ENABLED
    111.   dd CM_FILE_HELP
    112.   dw 0x00
    113.   du "Test1", 0, 0
    114.  
    115.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    116.   dd MFS_ENABLED
    117.   dd CM_FILE_HELP
    118.   dw 0x00
    119.   du "Test2", 0, 0
    120.  
    121.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    122.   dd MFS_ENABLED
    123.   dd CM_FILE_HELP
    124.   dw 0x80
    125.   du "Test3", 0, 0
    126.  
    127.   dd MFT_STRING  ; MENUEX_TEMPLATE_ITEM
    128.   dd MFS_ENABLED
    129.   dd CM_FILE_HELP
    130.   dw 0x80
    131.   du "About", 0, 0
    132.  
    133. ; 00000000  01 00 04 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    134. ; 00000010  00 00 00 00 01 00 46 00  69 00 6c 00 65 00 00 00  |......F.i.l.e...|
    135. ; 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 01 00 00  |................|
    136. ; 00000030  00 00 4e 00 65 00 77 00  00 00 00 00 00 00 00 00  |..N.e.w.........|
    137. ; 00000040  00 00 00 00 00 01 00 00  00 00 4f 00 70 00 65 00  |..........O.p.e.|
    138. ; 00000050  6e 00 2e 00 2e 00 2e 00  00 00 00 00 00 00 00 00  |n...............|
    139. ; 00000060  00 00 00 00 00 01 00 00  00 00 53 00 61 00 76 00  |..........S.a.v.|
    140. ; 00000070  65 00 2e 00 2e 00 2e 00  00 00 00 00 00 00 00 00  |e...............|
    141. ; 00000080  00 00 00 00 00 01 00 00  00 00 53 00 61 00 76 00  |..........S.a.v.|
    142. ; 00000090  65 00 20 00 61 00 73 00  2e 00 2e 00 2e 00 00 00  |e. .a.s.........|
    143. ; 000000a0  00 00 00 00 00 00 00 00  01 01 00 00 80 00 45 00  |..............E.|
    144. ; 000000b0  78 00 69 00 74 00 00 00  00 00 00 00 00 00 00 00  |x.i.t...........|
    145. ; 000000c0  02 01 00 00 01 00 45 00  64 00 69 00 74 00 00 00  |......E.d.i.t...|
    146. ; 000000d0  00 00 00 00 00 00 00 00  00 00 00 00 02 01 00 00  |................|
    147. ; 000000e0  00 00 52 00 65 00 64 00  6f 00 00 00 00 00 00 00  |..R.e.d.o.......|
    148. ; 000000f0  00 00 00 00 02 01 00 00  00 00 55 00 6e 00 64 00  |..........U.n.d.|
    149. ; 00000100  6f 00 00 00 00 00 00 00  00 00 00 00 02 01 00 00  |o...............|
    150. ; 00000110  00 00 43 00 75 00 74 00  00 00 00 00 00 00 00 00  |..C.u.t.........|
    151. ; 00000120  00 00 00 00 02 01 00 00  00 00 43 00 6f 00 70 00  |..........C.o.p.|
    152. ; 00000130  79 00 00 00 00 00 00 00  00 00 00 00 02 01 00 00  |y...............|
    153. ; 00000140  00 00 50 00 61 00 73 00  74 00 65 00 00 00 00 00  |..P.a.s.t.e.....|
    154. ; 00000150  00 00 00 00 00 00 00 00  02 01 00 00 00 00 52 00  |..............R.|
    155. ; 00000160  65 00 6d 00 6f 00 76 00  65 00 00 00 00 00 00 00  |e.m.o.v.e.......|
    156. ; 00000170  00 00 00 00 02 01 00 00  80 00 53 00 65 00 6c 00  |..........S.e.l.|
    157. ; 00000180  65 00 63 00 74 00 20 00  61 00 6c 00 6c 00 00 00  |e.c.t. .a.l.l...|
    158. ; 00000190  00 00 00 00 00 00 00 00  02 01 00 00 81 00 3f 00  |..............?.|
    159. ; 000001a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    160. ; 000001b0  02 01 00 00 01 00 48 00  65 00 6c 00 70 00 00 00  |......H.e.l.p...|
    161. ; 000001c0  00 00 00 00 00 00 00 00  00 00 00 00 02 01 00 00  |................|
    162. ; 000001d0  00 00 54 00 65 00 73 00  74 00 31 00 00 00 00 00  |..T.e.s.t.1.....|
    163. ; 000001e0  00 00 00 00 00 00 00 00  02 01 00 00 00 00 54 00  |..............T.|
    164. ; 000001f0  65 00 73 00 74 00 32 00  00 00 00 00 00 00 00 00  |e.s.t.2.........|
    165. ; 00000200  00 00 00 00 02 01 00 00  80 00 54 00 65 00 73 00  |..........T.e.s.|
    166. ; 00000210  74 00 33 00 00 00 00 00  00 00 00 00 00 00 00 00  |t.3.............|
    167. ; 00000220  02 01 00 00 80 00 41 00  62 00 6f 00 75 00 74 00  |......A.b.o.u.t.|
    168. ; 00000230  00 00 00 00  |....  |
    Напомню, чтобы не искали изображения на предыдущей странице.
    Screenshot_20230531_154900.png Screenshot_20230531_154917.png Screenshot_20230531_154926.png
     
    Последнее редактирование: 4 июн 2023
  14. Andrey_59

    Andrey_59 Member

    Публикаций:
    0
    Регистрация:
    20 фев 2021
    Сообщения:
    81
    Ну, тогда, насколько я могу судить у меня всё должно работать, но почему то дескриптор меню не создаётся.
    Код (Text):
    1. HMENU hMenu = ::LoadMenuIndirect(lpmth);
    lpmth - MENUEX_TEMPLATE_HEADER может быть параметр не тот, но пробовал и другой, указатель на память, но всё равно результат тот же.:dash1:

    Код (C++):
    1. HMENU CreateMenu(HWND hwnd)
    2. {
    3.     BYTE* p, * pmenuTempl;
    4.     p = pmenuTempl = (BYTE*)LocalAlloc(LPTR, 1024);
    5.     if (!p)
    6.     {
    7.         MessageBox(NULL, TEXT("Can't memory allocated"),
    8.             TEXT("Error"), MB_OK);
    9.         return (HMENU)NULL;
    10.     }
    11.  
    12.     MENUEX_TEMPLATE_HEADER* lpmth;
    13.     MENUEX_TEMPLATE_ITEM*   lpmti;
    14.  
    15.  
    16.  
    17.     lpmth = (MENUEX_TEMPLATE_HEADER*)p;
    18.     lpmth->wVersion = 1;
    19.     lpmth->wOffset  = 4;
    20.     lpmth->dwHelpId = 0;
    21.  
    22.     LPWSTR szDst;
    23.     LPCWSTR szSrc;
    24.     //ULONG_PTR ui = 0;
    25.  
    26.     //1
    27.     int flag = 4;
    28.  
    29.     lpmti = (MENUEX_TEMPLATE_ITEM*)(lpmth+1);
    30.     lpmti->dwType = MFT_STRING;
    31.     lpmti->dwState = MFS_ENABLED;
    32.     lpmti->menuId = 0;
    33.     lpmti->bResInfo = 0x01;
    34.     szDst = (LPWSTR)lpmti->szText;
    35.     szSrc = TEXT("FILE");
    36.     for (; *szDst++ = *szSrc++; flag ^= 2)
    37.         ;
    38.  
    39.     *((DWORD*)szDst) = 0;
    40.  
    41.     lpmti = (MENUEX_TEMPLATE_ITEM*)(((BYTE*)szDst) + flag);
    42.  
    43.     //2
    44.     flag = 0;
    45.     lpmti->dwType = MFT_STRING;
    46.     lpmti->dwState = MFS_ENABLED;
    47.     lpmti->menuId = CM_FILE_NEW;
    48.     lpmti->bResInfo = 0;
    49.     szDst = (LPWSTR)lpmti->szText;
    50.     szSrc = (LPCWSTR)TEXT("New");
    51.     for(; *szDst++ = *szSrc++; flag ^= 2)
    52.         ;
    53.     lpmti = (MENUEX_TEMPLATE_ITEM*)(((BYTE*)szDst) + flag);
    54.  
    55.     //3
    56.     flag = 0;
    57.  
    58.     lpmti->dwType = MFT_STRING;
    59.     lpmti->dwState = MFS_ENABLED;
    60.     lpmti->menuId = CM_FILE_QUIT;
    61.     lpmti->bResInfo = 0x80;
    62.     szDst = (LPWSTR)lpmti->szText;
    63.     szSrc = TEXT("Exit");
    64.     for (; *szDst++ = *szSrc++; flag ^= 2)
    65.         ;
    66.  
    67.     lpmti = (MENUEX_TEMPLATE_ITEM*)(((BYTE*)szDst) + flag);
    68.  
    69.  
    70.  
    71.     HMENU hMenu = ::LoadMenuIndirect(lpmth);
    72.  
    73.     if (!hMenu)
    74.     {
    75.         DWORD er = GetLastError();
    76.     }
    77.  
    78.     LocalFree(LocalHandle(p));
    79.  
    80.     return hMenu;
    81. }
     
  15. MaKsIm

    MaKsIm Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    94
    Попробуйте вызывать не макрос, адаптирующий функции под текущий тип строки (LoadMenuIndirect), а непосредственно функции api (LoadMenuIndirectA или LoadMenuIndirectW)
     
  16. Andrey_59

    Andrey_59 Member

    Публикаций:
    0
    Регистрация:
    20 фев 2021
    Сообщения:
    81
    Пробовал, тоже самое, ошибка. Дескриптор меню равен нуль.
     
  17. MaKsIm

    MaKsIm Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    94
    Тогда разбирайтесь в том, где вылетает функция LoadMenuIndirectA/LoadMenuIndirectW через отладку на уровне asm. GetLastError = 13 означает, что вы все же допускаете ошибку в составлении структур данных.
     
  18. Andrey_59

    Andrey_59 Member

    Публикаций:
    0
    Регистрация:
    20 фев 2021
    Сообщения:
    81
    Ну, мы же выяснили, что с asm-ом у меня проблемы...
     
  19. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Andrey_59,
    Создай меню в любом редакторе ресурсов, скомпилируй его и посмотри, чем отличается результат от того, что ты вручную составляешь (меню и диалоги в секции .rsrc как раз в виде этих темплейтов лежат).
     
  20. MaKsIm

    MaKsIm Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    94
    Тогда хотя бы написать короткий и законченный исходник, который может быть откомпилирован, и выложить его сюда с вашим же бинарником, вы же можете. Если в нем будет воспроизводиться ваша ошибка, тогда можно будет её найти. Гадание на кофейной гуще и телепатию в интернете ещё мало кто практикует.