| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Още един Проблем с VC++ програмиране http://mcu-bg.com/mcu_site/viewtopic.php?f=16&t=5402 |
Страница 1 от 1 |
| Автор: | diofan [ Сря Яну 30, 2008 6:08 pm ] |
| Заглавие: | Още един Проблем с VC++ програмиране |
Кода който пиша(VC++6.0) се компилира до dll и върви в някакво ехе в отделна нишка. От този dll управлявам друга програма която работи като СОМ сървър. Тъй като трябва да прихващам разни ивенти в този сървър, правя връзка от сървъра към клиента(моя длл) чрез някакъв КънекшънПоинт интерфейс и при даден ивент сървъра вика функция от моя код. Проблема е че сървъра има достъп до моята функция само докато съм отворил диалог или месаге бокс от длл-a, ако сложа пауза вместо да отварям месаге бокс - например Sleep(..) - няма ефект ,т.е. сървъра не получава достъп. Ще бъда благодарен за някакви насоки как да избегна отварянето на прозорец, за да прихвана ивента. |
|
| Автор: | TheWizard [ Сря Яну 30, 2008 6:47 pm ] |
| Заглавие: | |
с твоята функция отвори HIDEN hWND .... return ClientHandle server SendMessage(hClient.......) и обратно client SendMessage(hServer.......) с месаге WM_XXXXXX := RegisterWindowMessage(PChar('MessageXXXXXX')); можеш да полаваш и CreateMappedFile за да шарнеш ресурси между приложенията.... |
|
| Автор: | Predator_MF [ Чет Яну 31, 2008 3:45 pm ] |
| Заглавие: | |
Не съм фен на съобщенията през джамовете, има едно много сериозно забавяне, в зависимост какво върши прозореца и колко други съобщения трябва да обработи в момента в който пращам съобщение. С CreateMapFile (shared memory segment) правя повечето неща, но там има други проблеми - синхронизиране на двата (и повече) процеса, които ще работят в тоя сегмент. Друг проблем, който срещам там (и нямам време да ровя как да го отстраня), как комуникацията да работи между процеси, стартирани с различен logon. @TheWizard, ако имаш някаква идея моля те сподели я @diofan, виж тук за пример с Shared Memory Segment |
|
| Автор: | TheWizard [ Чет Яну 31, 2008 10:45 pm ] |
| Заглавие: | |
различен logon.... не съм пробвал такива ситуации |
|
| Автор: | diofan [ Пет Фев 01, 2008 7:23 pm ] |
| Заглавие: | |
Благодаря за насоките които ми дадохте, но тъй като нямам голям опит с програмирането на ВС++, бих искал да знам дали съм разбрал правилно идеята как да ползвам CreateFileMapping - трябва да направя отделна програма, която приема ивенти и ги отразява в този мапинг, откъдето ги чете моето приложение? |
|
| Автор: | Predator_MF [ Пет Фев 01, 2008 8:05 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Не ти трябва отделна програма, мапваш си променлива (структура, масив или нещо което искаш да пренесеш от един процес в друг) във PageFile-a на Windows, който ползваш като Shared Memory Segment (споделена памет) между процеси, нишки и пр. Удобството е, че можеш да отвориш този "мап" от други процеси.
Прочети малко MSDN за CreateFileMapping и OpenFileMapping. Ако разровиш нета, ще намериш и готови класове със синхронизации и пр. Има много варианти да се напише това, можеш да отвориш например сегмент с достъп FILE_MAP_ALL_ACCESS и в двата процеса, така че да четеш/пишеш и от двата процеса в един и същи map. |
|||||||||||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|