WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  DLL

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   DLL
server_mouse опубликован 07-07-2001 12:22 MSK   Click Here to See the Profile for server_mouse   Click Here to Email server_mouse  
Всем доброго времени суток!

Ситуация:
Хочу загружать при загрузке машины свою DLL которая будет юзать socket-ы, ставить\снимать\обрабатывать хуки и т.д.

Вопрос:
А возможно ли такое? Можно ли сделать это с помощью MFCAppWisard? Пробовал прописать MessageBox в InitInstance(). Ничего не выводит...
Далее, если DLL уже загружена, а моя прога(exe) хочет поюзать её ф-ции, что получится при LoadLibrary(), новая копия, или указатель к уже загруженой?

talex опубликован 10-07-2001 11:41 MSK     Click Here to See the Profile for talex  Click Here to Email talex     
po moemu, указатель к уже загруженой
Sancho опубликован 16-07-2001 19:14 MSK     Click Here to See the Profile for Sancho  Click Here to Email Sancho     
Если в твоей проге происходит отлов ранее запущенных сеунсов ее самой, то несомненно вернется указатель на уже загруженную библиотеку (т. к. запуска второй проги не произойдет, в рамках одного процесса вызовы LoadLibrary(...), кроме первого, вернут указатель на уже загруженную библиотеку). Примерно так было написано в одной хелпе.
А на счет автозапуска... Тупой вариант - rundll32, your_library и т. п. Или я чего-то не понял. :(
server_mouse опубликован 17-07-2001 22:32 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
Сенкс за ответы.

Попутно возник др. вопрос:
Можно ли через DLL заставить общаться две абсолютно независимые проги?
Может кто подскажет более правильный подход для взаимодействия двух процессов? Только не COM|OLE и иже с ними. Из пушки не стоит по воробьям...

necer опубликован 18-07-2001 10:25 MSK     Click Here to See the Profile for necer  Click Here to Email necer     
Через DLL общаться между процессами нельзя!
Каждый процесс загружает свою копию DLL в свое адресное пространство. А для передачи данных между процессами лично я использую TCP сокеты. Это позволяет передавать данные даже между процессами, запущенными на разных машинах. Возможно, есть лучший вариант.
DenizK опубликован 19-07-2001 12:06 MSK     Click Here to See the Profile for DenizK  Click Here to Email DenizK     
ню-ню - Со всей ответственностью говорю - через DLL размым процессам общаться можно, если сделать сегмент данных, который share

#pragma data_seg("Shared")
volatile DWORD g_dwChar = 0;
volatile HWND g_hwndMain = NULL
#pragma data_seg()
#pragma comment linker, "/Section:Shared,RWS")

тока переменные должны ОБЯЗАТЕЛЬНО инициироваться - а то ничего неполучится

ну а кроме сокетов (которые, конечно, рулез, но не в произвольном случае) мона для передачи заюзать MSMQ, ActiveX, RPC, pipes, DDE и WM_COPY_DATA

DenizK опубликован 19-07-2001 12:09 MSK     Click Here to See the Profile for DenizK  Click Here to Email DenizK     
Да, ещё забыл отображаемые в память файлы - это уж куда удобней чем сокеты если процессы запущены на одной машине.
necer опубликован 19-07-2001 12:42 MSK     Click Here to See the Profile for necer  Click Here to Email necer     
Кстати, интересный вариант c shared сегментом. Надо будет попробовать, спасибо за полезную информацию.
А вот насчет остального... вопрос же был поставлен таким образом, чтобы не использовать COM/OLE и иже с ними.
DenizK опубликован 19-07-2001 22:25 MSK     Click Here to See the Profile for DenizK  Click Here to Email DenizK     
Согласен - невнимательно чмтал сообщение

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.