Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.03.14;
Скачать: CL | DM;

Вниз

Помогите найти описание StringCchPrintf   Найти похожие ветки 

 
Дмитрий   (2009-04-12 16:56) [0]

Приветствую! Прошу помочь мне найти описание данной функции под делфи. Всё перерыл, есть только прототип на Си из MSDN. На паскаль перевести ума не хватает :(

HRESULT StringCchPrintf(
 LPTSTR pzsDest
 size_t cchDest
 LPCTSTR pzsFormat
 ...
);


 
Игорь Шевченко ©   (2009-04-12 17:04) [1]

format :)


 
Дмитрий   (2009-04-12 17:36) [2]

Смотрите - в MSDN код:

// This TOM implementation code is executed when a new windowed
// instance starts up.
// Variables with leading underscores are members of this class.

HRESULT hr;
OLECHAR szBuf[10];            // Place to put moniker
MONIKER *pmk;

hr = StringCchPrintf(szBuff, 10, "%x", _hwnd);
if (FAILED(hr))
{
//
// TODO: write error handler
//
}
CreateFileMoniker(szBuf, &pmk);
OleStdRegisterAsRunning(this, pmk, &_dwROTcookie);

Разве в этом случае я могу использовать обычный формат?  StringCchPrintf вроде как безопаснее, насколько я знаю...


 
Palladin ©   (2009-04-12 18:33) [3]


> StringCchPrintf вроде как безопаснее, насколько я знаю..
> .

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


 
Дмитрий   (2009-04-13 10:16) [4]

:) Хорошо, тогда вопрос в другой проекции - как перевести вышеуказанный код на делфи, используя функцию формат?

Был бы очень благодарен за любую помощь. Нужно позарез получить TOM работающего чужого приложения...


 
Дмитрий   (2009-04-13 10:27) [5]

Кажется, стормозил :) вопрос снят


 
Игорь Шевченко ©   (2009-04-13 12:42) [6]

Дмитрий   (13.04.09 10:27) [5]

Можно долго и мучительно писать прототип для сабжевой функции, используя модификаторы cdecl и varargs, а можно по вспомнить, что для использования Format нужно слегка изменить способ вызова и вместо перечисления дополнительных аргументов сразу за обязательными, просто взять их в квадратные скобки :)


 
Дмитрий   (2009-04-13 16:37) [7]

Спасибо, понял сам, что дурак :) А вот ещё вопрос, хоть я наверное и задолбал уже. Есть код:

// 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 17:15) [8]


> Сразу же остановился на CreateBindContext. Поискал во всех
> файлах - нету такого в поставке D7


Надо искать CreateBindCtx - сразу найдется.


 
Дмитрий   (2009-04-13 18:46) [9]

Пасиб, нашёл


 
Дмитрий   (2009-04-14 09:55) [10]

Снова я. Снова проблема :) Пишу так (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-16 15:31) [11]

Извините за настойчивость, но я пытаюсь вернуть тему к жизни :)

Кто-нибудь может посмотреть код и сказать, что неправильно? Я сам решить проблему не смог.

Может, выложить маленький тестовый исходник, чтобы вам было проще?


 
clickmaker ©   (2009-04-16 15:55) [12]

R чему равен?


 
Дмитрий   (2009-04-16 16:45) [13]

Щас скажу фигню, R равен -2147221008. В MSDN не указаны иные значения, кроме S_OK, поэтому именованных констант привести не могу :(


 
clickmaker ©   (2009-04-16 17:11) [14]

> R равен -2147221008

это CO_E_NOTINITIALIZED - CoInitialize has not been called.


 
Дмитрий   (2009-04-16 19:09) [15]

Инициализировал. Теперь другое значение - -2147221014... :( Что это?


 
Дмитрий   (2009-04-16 19:23) [16]

CoInitialize не возвращает S_OK.


 
Игорь Шевченко ©   (2009-04-16 19:30) [17]

А чего в итоге надо-то ?


 
Дмитрий   (2009-04-17 10:37) [18]

В итоге хочу получить ITextDocument запущенного экземпляра TOM. Дело в том, что получить этот интерфейс у своего приложения не составляет труда (GETOLEINTERFACE), а вот в случае с чужим richedit нужны костыли, пример которых приведён в MSDN. Но если делать как в MSDN"е пишут, то не работает. Почему - не знаю. Пока что подозрения на неправильное преобразование строки вот тут:

buf := Format("%x", [IntToStr(hRich)]);

Может кто-нибудь сказать, соответствует ли оно мсдновскому

hr = StringCchPrintf(szBuff, 10, "%x", _hwnd);

?


 
Игорь Шевченко ©   (2009-04-17 11:02) [19]


> buf := Format("%x", [IntToStr(hRich)]);


buf := Format("%x", [hRich]);


> В итоге хочу получить ITextDocument запущенного экземпляра
> TOM


Че ?


 
Дмитрий   (2009-04-17 12:12) [20]

Вот минимальный исходник(http://webfile.ru/3420050). Прошу потестировать. Запускаете WordPad и наводите мышку на него, должен вернуться хендл Rich Edit. Далее, жмёте кнопку. У меня успешно отрабатывают все функции, кроме CreateBindCtx...


> Че ?

Возможно, мой английский действительно очень плох )) MSDN говорит:

...TOM instance with a window needs to register in the ROT...


 
clickmaker ©   (2009-04-17 13:57) [21]

> -2147221014... :( Что это?

http://social.msdn.microsoft.com/Search/en-US/?query=MK_E_CANTOPENFILE&ac=3


 
Дмитрий   (2009-04-17 21:36) [22]

Ага.. И что бы это значило? Есть идеи?



Страницы: 1 вся ветка

Текущий архив: 2010.03.14;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
15-1260999367
Германн
2009-12-17 00:36
2010.03.14
"Линия задержки"


15-1257017604
Kerk
2009-10-31 22:33
2010.03.14
Книга мастеров


2-1263222743
Pavel
2010-01-11 18:12
2010.03.14
Компонент idHTTPServer


11-1214001190
Zonder
2008-06-21 02:33
2010.03.14
TKOLListView.DoubleBuffered + XP


15-1261938570
Anatoly Podgoretsky
2009-12-27 21:29
2010.03.14
Литвин президент!