![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите найти описание StringCchPrintf
Дмитрий © (2009-04-12 16:56:00)Приветствую! Прошу помочь мне найти описание данной функции под делфи. Всё перерыл, есть только прототип на Си из MSDN. На паскаль перевести ума не хватает :(
HRESULT StringCchPrintf(
LPTSTR pzsDest
size_t cchDest
LPCTSTR pzsFormat
...
);
Дмитрий (2009-04-17 21:36:00) [1]Ага.. И что бы это значило? Есть идеи?
clickmaker (2009-04-17 13:57:00) [2]> -2147221014... :( Что это?
http://social.msdn.microsoft.com/Search/en-US/?query=MK_E_CANTOPENFILE&ac=3
Дмитрий (2009-04-17 12:12:00) [3]Вот минимальный исходник( http://webfile.ru/3420050). Прошу потестировать. Запускаете WordPad и наводите мышку на него, должен вернуться хендл Rich Edit. Далее, жмёте кнопку. У меня успешно отрабатывают все функции, кроме CreateBindCtx...
> Че ?
Возможно, мой английский действительно очень плох )) MSDN говорит:
...TOM instance with a window needs to register in the ROT...
Игорь Шевченко (2009-04-17 11:02:00) [4]
> buf := Format('%x', [IntToStr(hRich)]);
buf := Format('%x', [hRich]);
> В итоге хочу получить ITextDocument запущенного экземпляра
> TOM
Че ?
Дмитрий (2009-04-17 10:37:00) [5]В итоге хочу получить ITextDocument запущенного экземпляра TOM. Дело в том, что получить этот интерфейс у своего приложения не составляет труда (GETOLEINTERFACE), а вот в случае с чужим richedit нужны костыли, пример которых приведён в MSDN. Но если делать как в MSDN'е пишут, то не работает. Почему - не знаю. Пока что подозрения на неправильное преобразование строки вот тут:
buf := Format('%x', [IntToStr(hRich)]);
Может кто-нибудь сказать, соответствует ли оно мсдновскому
hr = StringCchPrintf(szBuff, 10, "%x", _hwnd);
?
Игорь Шевченко (2009-04-16 19:30:00) [6]А чего в итоге надо-то ?
Дмитрий (2009-04-16 19:23:00) [7]CoInitialize не возвращает S_OK.
Дмитрий (2009-04-16 19:09:00) [8]Инициализировал. Теперь другое значение - -2147221014... :( Что это?
clickmaker (2009-04-16 17:11:00) [9]> R равен -2147221008
это CO_E_NOTINITIALIZED - CoInitialize has not been called.
Дмитрий (2009-04-16 16:45:00) [10]Щас скажу фигню, R равен -2147221008. В MSDN не указаны иные значения, кроме S_OK, поэтому именованных констант привести не могу :(
clickmaker (2009-04-16 15:55:00) [11]R чему равен?
Дмитрий (2009-04-16 15:31:00) [12]Извините за настойчивость, но я пытаюсь вернуть тему к жизни :)
Кто-нибудь может посмотреть код и сказать, что неправильно? Я сам решить проблему не смог.
Может, выложить маленький тестовый исходник, чтобы вам было проще?
Дмитрий (2009-04-14 09:55:00) [13]Снова я. Снова проблема :) Пишу так (hRich - хендл чужого richedit):
var
buf: WideString;
pmk: IMoniker;
pbc: IBindCtx;
TextDocument: ITextDocument;
R: HRESULT;
begin
pbc := nil;
pmk := nil;
TextDocument := nil;
buf := Format('%x', [Int2Str(hRich)]);
CreateFileMoniker(PWideChar(buf), pmk);
CreateBindCtx(0, pbc);
R := pmk.BindToObject(pbc, nil, IID_ITextDocument, TextDocument);
case R...
if TextDocument = nil then ShowMessage('Bingo :(');
end;
TextDocument всегда равен нулю. Что в этом коде неправильно?
Дмитрий (2009-04-13 18:46:00) [14]Пасиб, нашёл
Игорь Шевченко (2009-04-13 17:15:00) [15]
> Сразу же остановился на CreateBindContext. Поискал во всех
> файлах - нету такого в поставке D7
Надо искать CreateBindCtx - сразу найдется.
Дмитрий (2009-04-13 16:37:00) [16]Спасибо, понял сам, что дурак :) А вот ещё вопрос, хоть я наверное и задолбал уже. Есть код:
// Accessibility Client:
// Find hwnd for window pointed to by mouse cursor.
GetCursorPos(&pt);
hwnd = WindowFromPoint(pt);
// Look in ROT (running object table) for an object attached to hwnd
hr = StringCchPrintf(szBuff, 10, "%x", hwnd);
if (FAILED(hr))
{
//
// TODO: write error handler
//
}
CreateFileMoniker(szBuf, &pmk);
CreateBindContext(0, &pbc);
pmk->BindToObject(pbc, NULL, IID_ITextDocument, &pDoc);
pbc->Release();
if( pDoc )
{
pDoc->RangeFromPoint(pt.x, pt.y, &pRange);
// ...now do whatever with the range pRange
}
Пытаюсь адаптировать под делфи. Сразу же остановился на CreateBindContext. Поискал во всех файлах - нету такого в поставке D7 :( Где взять?
Игорь Шевченко (2009-04-13 12:42:00) [17]Дмитрий (13.04.09 10:27) [5]
Можно долго и мучительно писать прототип для сабжевой функции, используя модификаторы cdecl и varargs, а можно по вспомнить, что для использования Format нужно слегка изменить способ вызова и вместо перечисления дополнительных аргументов сразу за обязательными, просто взять их в квадратные скобки :)
Дмитрий (2009-04-13 10:27:00) [18]Кажется, стормозил :) вопрос снят
Дмитрий (2009-04-13 10:16:00) [19]:) Хорошо, тогда вопрос в другой проекции - как перевести вышеуказанный код на делфи, используя функцию формат?
Был бы очень благодарен за любую помощь. Нужно позарез получить TOM работающего чужого приложения...
Palladin (2009-04-12 18:33:00) [20]
> StringCchPrintf вроде как безопаснее, насколько я знаю..
> .
Расскажи на сколько безопасней и я расскажу насколько ты знаешь :)