Совместное использование дескрипторов GDI между процессами в Windows CE 6.0

StackOverflow https://stackoverflow.com/questions/133948

  •  02-07-2019
  •  | 
  •  

Вопрос

Я знаю, что дескрипторы GDI уникальны и специфичны для процесса в "Больших окнах", но работают ли они так же в Windows CE 6.0?

Например:У меня есть служба управления шрифтами, которую будут использовать несколько других служб и приложений.Этот сервис содержит список допустимых шрифтов и конфигураций для печати и отображения;CreateFontIndirect() была вызвана для каждого из них.Когда одно из этих клиентских приложений запрашивает определенный шрифт (и конфигурацию), могу ли я вернуть ему соответствующий HFONT?Если нет, есть ли безопасный / допустимый способ дублировать дескриптор, ala DuplicateHandle для дескрипторов ядра.

Причина, по которой я спрашиваю, заключается в том, что я видел, как HFONTs, переданные другому приложению через postMessage, работают корректно, но я не думал, что они "должны" это делать.

Это было полезно?

Решение

Я полагаю, что вы правы, вы не можете полагаться на то, что HFONTs безопасно передается между процессами.

"Причина, по которой я спрашиваю, заключается в том, что я видел, как HFONTs, переданные другому приложению через postMessage, работают корректно, но я не думал, что они "должны" это делать".

Они не были переданы правильно, так что никакого "предполагаемого" здесь нет.Хотя HFONTs не гарантированно будут работать во всех процессах, они также не гарантированно будут уникальный во всех процессах."Arial" может иметь одинаковое значение HFONT в двух разных процессах в определенный момент времени с определенной версией каждого приложения и может измениться в любой момент (в том числе на полпути к его использованию!).

Это как если бы я рисовал, а у меня закончилась оранжевая краска, которую я храню в качестве третьего тюбика на своем мольберте.Я мог бы дотянуться до твоего мольберта и взять 3-ю пластинку...но у меня нет гарантии, что он оранжевый...у меня нет гарантии, что в нем вообще есть краска!Возможно, вы сегодня чистили зубы у станка..упс!

Дескрипторы GDI похожи на число "3" в этом примере.Сегодня GDI может размещать трубки в одном и том же порядке на всех станках.Это может поддерживать некоторые из них в порядке, некоторые нет (например, оранжевый "вроде работает", но "морская пена зеленая" испорчена).Они могут быть в порядке на одном устройстве CE, но не на другом.

Как всегда, YMMV.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top