Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите найти описание StringCchPrintf


Страницы:   1 2

Дмитрий ©   (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 вроде как безопаснее, насколько я знаю..
> .

Расскажи на сколько безопасней и я расскажу насколько ты знаешь :)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо