#c #boost #windows-mobile
#c #boost #windows-mobile
Вопрос:
Кто-нибудь смог использовать Boost в приложении Windows Mobile 6.x? Более конкретно, я хочу использовать Thunk32 для создания обратного вызова нестатической функции-члена. Но в нем используются некоторые сложные методы приведения к ускорению, которые не будут компилироваться в мобильных проектах.
Ответ №1:
Windows Mobile имеет искаженную реализацию стандартной библиотеки. Вам придется использовать более полную версию. Я лично использую STLPort. Используя это, большая часть Boost будет работать нормально. Однако у меня все еще возникают проблемы с использованием некоторых библиотек, которые не предназначены только для заголовков.
Кроме того, библиотеку Thunk32, на которую вы указали, вероятно, потребуется модифицировать для ARM. Используемый ассемблерный код является x86.
-PaulH
Комментарии:
1. Спасибо. Вы правы. Я даже не думал об инструкциях x86 по сравнению с ARM. Знаете ли вы какой-либо другой способ создания обратного вызова для нестатической функции-члена?
2. функции Windows, которые принимают обратный вызов, обычно позволяют передавать пользовательский параметр. Попробуйте передать
this
. Я думаю, вы могли бы заставить эту библиотеку Thunk32 работать, если бы изменили сборку. К сожалению, я не специалист по сборке.3. К сожалению, некоторые вызовы Windows API не работают таким образом. например, SetWindowsHookEx не принимает никаких параметров, которые я могу использовать, и не передает никакого значения своей функции обратного вызова. Как я и просил в своем первоначальном сообщении, Thunk 32 использует Boost для выполнения какого-то кастинга, который мне с трудом удается понять.
4. @Sam, есть веская причина
SetWindowsHookEx
, по которой этого не делается. Обратный вызов вызывается не вашим процессом, а gwes.exe . Даже если бы вы могли использовать ее, вы бы имели дело с разными пространствами памяти. У меня есть статья code project на эту тему, если вам интересно: codeproject.com/KB/windows/WM-Input-Hooks.aspx