|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.01.2011, 00:17 | #1 |
Регистрация: 18.01.2011
Сообщений: 6
|
перехват вызовов в detours.lib
Добрый день. Делаю проект по замене стандартного диалога открытия и сохранения файлов в openoffice своим диалогом. (Смысл в том, чтобы разрешать пользователю сохранять файлы и открывать их только из определенных папок). Для этого осуществляю перехват функций SHBrowseForFolder, GetOpenFileName и GetSaveFileName при вызове их из openoffice с помощью библиотеки detours.lib от microsoft. В второй версии openoffice перехват работает, и я заменяю диалог открытия своим, с только разрешенными папками. В третьей версии openoffice моя библиотека уже не работает. Почему? Может там другие функции надо перехватывать?
|
18.01.2011, 06:59 | #2 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
Очень даже может быть, что надо перехватывать другие функции, Капитан Очевидность какбэ одобряэ ваше предположение
Под выше вами перечисленными функциями лежат чуть более 9000 более низкоуровневых функций-возможно стоит взглянуть в их сторону. Также неплохо помнить, что у функций работающих со строками есть аскии и юникод версии
Нет, ну правда..
Последний раз редактировалось yuran666666; 18.01.2011 в 07:29. |
18.01.2011, 22:06 | #3 |
Регистрация: 18.01.2011
Сообщений: 6
|
Нашел в исходниках 3 версии openoffice(файл FPEntry3.cxx) такой код:
static Reference< XInterface > SAL_CALL createInstance( const Reference< XMultiServiceFactory >& rServiceManager ) { Reference< XInterface > xDlg; bool bVista = IsWindowsVista(); if (bVista) { fprintf(stdout, "use special (vista) system file picker ...\n"); xDlg.set( static_cast< XFilePicker2* >( new ::fpicker::win32::vista::VistaFileP icker( rServiceManager ) ) ); } else { fprintf(stdout, "use normal system file picker ...\n"); xDlg.set( static_cast< XFilePicker2* >( new CFilePicker( rServiceManager ) ) ); } return xDlg; } во второй версии аналогичный код выглядит как: static Reference< XInterface > SAL_CALL createInstance( const Reference< XMultiServiceFactory >& rServiceManager ) { return Reference< XInterface >( static_cast< XFilePicker2* >( new CFilePicker( rServiceManager ) ) ); } По идее на системах vista и выше используется другой класс. Но я тестирую на xp sp3. Может все равно на ней используется класс VistaFilePicker? И какие его методы тогда надо перехватывать? |
18.01.2011, 23:41 | #4 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
Перехват функций и классы с методами это вообще из разных опер. Неплохо бы было сформулировать яснее что конкретно надо+ссылку на программу (именно тот же билд) в которой это это не удается осуществить
Нет, ну правда..
|
19.01.2011, 23:48 | #5 |
Регистрация: 18.01.2011
Сообщений: 6
|
Я посмотрел, в третьей версии офиса на системах xp в итоге вызываются те же функции создания диалога, что и во второй версии: SHBrowseForFolder, GetOpenFileName и GetSaveFileName. Со второй версией офиса перехват работает корректно, и даже перехватываются вызовы этих функций из других программ при открытии диалога открытия/сохранения файла, а в 3 версии <a href url="http://download.i-rs.ru/pub/openoffice/3.2.1/ru/OOo_3.2.1_Win_x86_install-wJRE_ru_infra.exe"> офиса</a> почему-то не срабатывает. Как такое возможно?
Попробовал сделать ребилд с последней версией detours.lib, собранной из исходников с сайта microsoft, и получил ошибку: Ошибка 5 error LNK2019: ссылка на неразрешенный внешний символ "struct HINSTANCE__ * __stdcall Detoured(void)" (?Detoured@@YGPAUHINSTANCE__@@XZ) в функции _DetourAttachEx@20 z:\HookDlg32\Detours21.lib(detours. obj) С ней как разобраться? |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Detours Express 2.1 | coNsept | Visual C++ | 2 | 08.01.2011 19:31 |
файлы lib и dll | Golovastik | Общие вопросы C/C++ | 2 | 29.05.2010 23:23 |
wsock32.lib | master3763 | Общие вопросы C/C++ | 4 | 28.01.2010 16:03 |
lib библиотеки | gena_br | Общие вопросы C/C++ | 1 | 31.07.2009 17:40 |
obj и lib | ("")(Э_Є)("") | Общие вопросы C/C++ | 0 | 27.05.2009 05:11 |