Re: HDC и процессы
От: Alex Fedotov США  
Дата: 30.10.04 09:06
Оценка: 2 (1)
Здравствуйте, rommix, Вы писали:

R>Если у меня есть переменная HDC, напрмер полученная так:


R>
R>HDC hdc = CreateDC("DISPLAY", NULL, NULL, NULL);
R>HDC hdcCompatible = CreateCompatibleDC(hdc);
R>


R>то могу я переменную hdcCompatible передавать между процессами и работать с тем же HDC в другом процессе (не потоке) последовательно, т.е. HDC в один и тот же момент времени не используется в обоих процессах? есть мысль, что нет... т.к. в МСДНе написанно:

R>Note that the handle to the DC can only be used by a single thread at any one time.

R>говорится про потоки, а в разных процессах тогда тем более??


Согласно Feng Yuan, объекты GDI привязаны к процессу, поэтому воспользоваться хэндлом созданным в другом процессе не получится.

То, что написано в MSDN, к этому отношения не имеет, так как там речь идет о синхронизации доступа к HDC.
-- Alex Fedotov
Re[2]: HDC и процессы
От: Andrew S Россия http://alchemy-lab.com
Дата: 31.10.04 14:19
Оценка: 2 (1)
R>>говорится про потоки, а в разных процессах тогда тем более??

AF>Согласно Feng Yuan, объекты GDI привязаны к процессу, поэтому воспользоваться хэндлом созданным в другом процессе не получится.


Немного уточню. На самом деле, существует глобальная для всей системы таблица объектов GDI. Однако элемент данной таблицы имеет поле nProcess, которое (если не равно 0) содержит идентификатор процесса-хозяина объекта. Т.о. осуществяется контроль доступа других процессов к объекту GDI. В связи с чем, в windows NT\2000, действительно, воспользоваться объктом gdi другого процесса не удастся.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
HDC и процессы
От: rommix  
Дата: 29.10.04 23:01
Оценка:
Если у меня есть переменная HDC, напрмер полученная так:
HDC hdc = CreateDC("DISPLAY", NULL, NULL, NULL);
HDC hdcCompatible = CreateCompatibleDC(hdc);

то могу я переменную hdcCompatible передавать между процессами и работать с тем же HDC в другом процессе (не потоке) последовательно, т.е. HDC в один и тот же момент времени не используется в обоих процессах? есть мысль, что нет... т.к. в МСДНе написанно:
Note that the handle to the DC can only be used by a single thread at any one time.
говорится про потоки, а в разных процессах тогда тем более??
Re[3]: HDC и процессы
От: rommix  
Дата: 31.10.04 21:07
Оценка:
хорошо, хэндл контекста передавать нельзя, а если мне надо передать битмап (изображение) из процесса в процесс, то это можно сделать через функции GetDIBits, SetDIBits (передав BITMAPINFO и байты самого изображения), да? не надо использовать еще какую-нибудь функциональность для ускорения работы данных функций?
Re[4]: HDC и процессы
От: Alex Fedotov США  
Дата: 31.10.04 22:43
Оценка:
Здравствуйте, rommix, Вы писали:

R>хорошо, хэндл контекста передавать нельзя, а если мне надо передать битмап (изображение) из процесса в процесс, то это можно сделать через функции GetDIBits, SetDIBits (передав BITMAPINFO и байты самого изображения), да? не надо использовать еще какую-нибудь функциональность для ускорения работы данных функций?


Можно создать dib section, основанную на memory mapped file, который отображается в память обоих процессов. Тогда данные, записанные в одном процессе, будут автоматически видны в другом.

Последние два параметра CreateDIBSection позволяют задать memory mapped file handle и смещение к данным изображения. В начало файла можно положить структуру BITMAPINFO и любые дополнительные данные, которые вы хотите разделять между процессами.
-- Alex Fedotov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.