Автор
|
Тема: COM и взаимодействие процессов.
|
server_mouse |
опубликован 21-07-2001 20:11 MSK
Hi, народ! Я то думал COM даёт возможность взаимодействия процессов... Как я заблуждался! ALL, pls разубеди меня, я столько кроптел над COM, и всё для того, что-бы узнать -- нафиг он мне сейчас не упал. Неужели невозможно из нескольких процессов использовать один и тотже экземпляр COM-сервера(DLL)?
|
OlegO
|
опубликован 23-07-2001 11:32 MSK
Так в общем (в чем паника) :( - СOM Объект из .DLL (не COM+) нельзя использовать для обмена данными между процессами, т.к. отдельный экземпляр живут в рамках одного запускающего процесса (In-Process). - Зато через COM Объекты в .Exe и (Сервисы) c легкостью, так как он живут в своем процессе (Out-Process). И т.д.А если тебе просто надо обменяться информацией между Процессами, то вот открыл книгу: Краткий списко механизмом Обмена данными между процессами: 1. WM_COPYDATA 2. Clipboard. 3. Dll Shared переменные 4. Shared Memory. 5. Anonymous pipe. 6. Named pipe. 7. Почтовые слоты mailslots. 8. Dynamic Data Exchange, DDE 9. Сокеты. 10. RPC. 11. Microsoft Message Queue (MSMQ). |
server_mouse
|
опубликован 23-07-2001 12:56 MSK
А как делать COM-сервис-сервер? DLL-сервер я уже лапсать научился. Объясните ламеру плз. Что вместо DllRegisterServer? А вместо DllGetClassObject? И как вообще экспортировать ф-ции из exe? Создал AppWisard-ом проект(ATL-COM), но ничего толком не понял, может потому что ATL не знаю... |
OlegN
|
опубликован 23-07-2001 13:47 MSK
> Что вместо DllRegisterServer? ничего, просто в .exe файле обработай опцию командной строки например -reg и -unreg и выполни соответствующее действие как в DllRegisterServer и DllUnregisterServer> А вместо DllGetClassObject? CoRegisterClassObject при старте .exe файла и CoRevokeClassObject при завершении. В клиентском модуле используй CoCreateInstanceEx и CoGetClassObject А вообще-то в MSDN-e это очень подробно расписано, и пример есть. Только не поленись поискать и почитать пол часа.
|