Я пытаюсь добавить дополнительную кнопку в панель инструментов в Internet Explorer.
Я предполагал, что реализация будет прямой, и в настоящее время я использую этот код:
TBBUTTON buttonToAdd;
ZeroMemory( &buttonToAdd, sizeof( TBBUTTON ) );
buttonToAdd.iBitmap = 1;
buttonToAdd.idCommand = 1;
buttonToAdd.fsState = TBSTATE_ENABLED;
buttonToAdd.fsStyle = BTNS_BUTTON|BTNS_AUTOSIZE;
LRESULT insertButtonResult = SendMessage( hWndToolbar, TB_INSERTBUTTON, 0, (LPARAM)&buttonToAdd );
Когда сообщение отправлено, Internet Explorer столкнется 90% времени (10% времени, я получаю несколько сломанную кнопку на панели инструментов) со следующим исключением:
Unhandled exception at 0x000007FEFB97DDFA (comctl32.dll) in iexplore.exe: 0xC000041D: An unhandled exception was encountered during a user callback.
Учитывая, что результаты несовместимы, я предположил, что проблема с макетом памяти. Поэтому я попытался отправить TB_INSERTBUTTONA
вместо (мое приложение по умолчанию - TB_INSERTBUTTONW
), но это не влияет на проблему.
Я также пробовал как 32, так и 64 сборки моего приложения, оба имеют одинаковый результат.
Я посмотрел на столбец iexplore.exe
, который выглядит так:
comctl32.dll!CToolbar::TBInputStruct(struct _TBBUTTONDATA *,struct _TBBUTTON const *) Unknown
comctl32.dll!CToolbar::TBInsertButtons(unsigned int,unsigned int,struct _TBBUTTON *,int) Unknown
comctl32.dll!CToolbar::ToolbarWndProc(struct HWND__ *,unsigned int,unsigned __int64,__int64) Unknown
comctl32.dll!CToolbar::s_ToolbarWndProc(struct HWND__ *,unsigned int,unsigned __int64,__int64) Unknown
user32.dll!UserCallWinProcCheckWow() Unknown
user32.dll!DispatchClientMessage() Unknown
user32.dll!__fnDWORD() Unknown
ntdll.dll!KiUserCallbackDispatcherContinue() Unknown
user32.dll!NtUserPeekMessage() Unknown
user32.dll!PeekMessageW() Unknown
...
Я нашел это несколько интересным, потому что я предполагаю, что метод в верхней копии данных из моей входной структуры во внутреннюю структуру и что-то пойдет не так. Но что не так с моей структурой входных данных?
Исходный код доступен в GitHub по адресу: https://github.com/oliversalzburg/ie-button