Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2011, 00:17   #1
shadow_shaman
 
Регистрация: 18.01.2011
Сообщений: 6
Восклицание перехват вызовов в detours.lib

Добрый день. Делаю проект по замене стандартного диалога открытия и сохранения файлов в openoffice своим диалогом. (Смысл в том, чтобы разрешать пользователю сохранять файлы и открывать их только из определенных папок). Для этого осуществляю перехват функций SHBrowseForFolder, GetOpenFileName и GetSaveFileName при вызове их из openoffice с помощью библиотеки detours.lib от microsoft. В второй версии openoffice перехват работает, и я заменяю диалог открытия своим, с только разрешенными папками. В третьей версии openoffice моя библиотека уже не работает. Почему? Может там другие функции надо перехватывать?
shadow_shaman вне форума Ответить с цитированием
Старый 18.01.2011, 06:59   #2
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Очень даже может быть, что надо перехватывать другие функции, Капитан Очевидность какбэ одобряэ ваше предположение
Под выше вами перечисленными функциями лежат чуть более 9000 более низкоуровневых функций-возможно стоит взглянуть в их сторону. Также неплохо помнить, что у функций работающих со строками есть аскии и юникод версии
Нет, ну правда..

Последний раз редактировалось yuran666666; 18.01.2011 в 07:29.
yuran666666 вне форума Ответить с цитированием
Старый 18.01.2011, 22:06   #3
shadow_shaman
 
Регистрация: 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? И какие его методы тогда надо перехватывать?
shadow_shaman вне форума Ответить с цитированием
Старый 18.01.2011, 23:41   #4
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Перехват функций и классы с методами это вообще из разных опер. Неплохо бы было сформулировать яснее что конкретно надо+ссылку на программу (именно тот же билд) в которой это это не удается осуществить
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 19.01.2011, 23:48   #5
shadow_shaman
 
Регистрация: 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)
С ней как разобраться?
shadow_shaman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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