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

Вниз

Использование общих ресурсов dll 2мя процессами.   Найти похожие ветки 

 
UnDISCOvery ©   (2002-11-18 18:32) [0]

Вот такая проблема у меня, Уважаемые !
Содрал я безжалостно пример из Тейскьеры и Пачеко про совместное использование ресурсов длл-ки двумя процессами. Это там еще используется метод отображения файлов в память.
используется там такая структура:
type
PGlobalDLLData = ^TGlobalDLLData;
TGlobalDLLData = record
S: String[50];
I: Integer;
B: TBitmap; <---- Это добавил я !!!
end;

Есть два приложения: App1, App2. В первом меняются поля GlobalData, второе это отслеживает по таймеру. Со строковым полем и числовом проблем никаких, а вот с Битмапом ничего не получается. Второе ну ни в какую не хочет видеть изменения, которое вносит первое. Или AV или "Неверный дескриптор"? или вообще "Can`t Assign s TBitmap to a TBitmap". Где грабли ?
Заранее сэнкс.


 
Юрий Федоров ©   (2002-11-18 18:51) [1]

Адресное пространство все-же разное у двух процессов? следовательно, указатели(каковым по сути является TBitmap) передавать нельзя, или я ошибаюсь?


 
UnDISCOvery ©   (2002-11-18 19:02) [2]

Видимо не ошибаешся :)) ... Но как бороть ?


 
Marcus   (2002-11-18 19:17) [3]

А Bitmap.SaveToStream / AnotherBitmap.LoadFromStream не спасут?


 
UnDISCOvery ©   (2002-11-18 19:24) [4]

2 Marcus: Думаю - это не устроит с точки зрения скорости ...
2 Юрий: У двух процессов конечно разное, но отображение длл происходит с одного и того же адреса, т.е. оба приложения используют по сути одну и ту же структуру лежащую по определенному адресу. указатели передавать можно и даже нужну, именно черз них и идет весь доступ. А структура указатель на указатель существует безболезненно. Дело в том, не как передавать, а как менять !!! N.B.


 
reonid ©   (2002-11-18 19:46) [5]

UnDISCOvery © (18.11.02 19:24)
При использовании отображённого в память файла у
тебя в двух приложениях оказывается некий кусок адресного
пространства, общий для обоих.
В этом куске лежит твоя структура TGlobalDLLData.

А указатель B в ней указывает на участок памяти, который
не разделятся между приложениями, и при обращении по этому указателю разные процессы реально обращаются к совершенно
различным страницам памяти.

Чтобы понять, что тут можно сделать, попробуй
более точно описать, что именно тебе нужно.


 
UnDISCOvery ©   (2002-11-18 20:27) [6]

2 reonid: OK. Понял.

Попытаюсь поточнее ...
При старте приложения App1.exe происходит загрузка 3х файлов .bmp в некий, ну допустим, массив. По нажатию кнопки будет происходит произвольный выбор из этого массива и выбранная картинка должна грузиться в глобальную структуру GlobalData dll-ки.
Приложение App2.exe по таймеру периодически обращается к той же GlobalData и отслеживает все изменения, т.е. обновляет свою картинку согласно картинке из GlobalData.

А если совсем короче, то хочу чтобы было также как и с полями типов string и integer. Начал набирать текст в App1, как тут же эти изменения отображаются и у App2.

Доходчиво ? :)


 
reonid ©   (2002-11-18 20:44) [7]

Совсем как с string и integer не получится.
Ты, кстати, заметил, что там не string, а string[50]? -
именно потому, что string - указатель.

Можно, например (самый простой путь),
сделать одинаковые массивы битмапов в обоих приложениях,
а в структуре хранить индекс разделяемой структуре.

И соответственно, по нажатию кнопки менять этот индекс.


 
MBo ©   (2002-11-19 06:36) [8]

Можно использовать несколько вариантов хранения bitmap в общей памяти, например, извлечь BitmapInfoHeader и BitmapBits в блоки данных и держать там их, но проще воспользоваться предложением Marcus - сохранить TBitmap в MemoryStream и этот блок данных держать в shared памяти, тогда код очень прост


 
UnDISCOvery ©   (2002-11-19 12:31) [9]

Всем спасибо. Если не сложно, то прошу прислать куски кода с реализацией ваших предложений на мыло.



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

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

Наверх




Память: 0.49 MB
Время: 0.015 c
3-92838
symbol
2002-11-08 08:24
2002.11.28
Мастера ! помогите, плз, решить следующую проблему:


6-93159
ketorol
2002-10-02 10:06
2002.11.28
помогите очень интересно и нужно


14-93257
Билл Гейтс
2002-11-10 02:17
2002.11.28
Что должно присутствовать в хорошем инсталляторе?


1-93002
kazulja
2002-11-18 05:42
2002.11.28
Speech 5.1


14-93237
Bboy tn
2002-11-10 00:19
2002.11.28
пересечение кругов