реклама на сайте
подробности

 
 
> Портирование DLL на Linux, Принцип работы Windows DLL
amw
сообщение May 18 2007, 14:15
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Задача такая:
Есть: DLL для Windows в исходниках C++.
Нужно: shared lib для Linux с сохранением совместимости на уровне исходников приложений.

DLL использует активно OVERLAPPED IO, Notyfication, Event, Thread.
В Linux (кроме Thread) нет аналогов этому. Или есть? Тогда какие, что почитать?

Опыта программирования в Windows очень мало, потому и вопросы тупые:

После анализа кода появилось ощущение, что переменные в Windows DLL могут использоваться разными приложениями. В смысле одна и та же копия переменной доступна нескольким процессам. Это так?

В коментариях в исходниках есть фразы на подобие
"Отсылаем WM_MESSAGE всем процессам, использующим DLL что очередь изменилась."
Вопрос: Windows DLL является самостоятельной сущностью, типа процесса? А иначе как DLL может отослать что-то ВСЕМ процессам, ее использующим?

Прошу не пинать ногами и не посылат сразу в MSDN. Я его пытаюсь читать, но эти вопросы ставят меня в тупик.

Сообщение отредактировал amw - May 18 2007, 14:20


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ms1
сообщение May 18 2007, 16:51
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 150
Регистрация: 13-10-05
Пользователь №: 9 614



Про линукс ничего не скажу.
А про Win DLL упрощенно:
Динамически линкованные код и данные после загрузки ДЛЛ ничем не отличаются от статически линкованных.

Цитата(amw @ May 18 2007, 18:15) *
После анализа кода появилось ощущение, что переменные в Windows DLL могут использоваться разными приложениями. В смысле одна и та же копия переменной доступна нескольким процессам. Это так?


"Обычные" данные принадлежат тому процессу в контексте которого работает ДЛЛ и соответственно имеется столько копий, сколько раз ДЛЛ загружена.
Однако можно разместить статические данные в shared сегменте, тогда такие данные всех экземпляров загруженных ДЛЛ будут отображатся на одну и туже область памяти.
Т.е. они будут доступны из всех процессов загрузивших эту ДЛЛ.
Правда это так не только для ДЛЛ.

Цитата
В коментариях в исходниках есть фразы на подобие
"Отсылаем WM_MESSAGE всем процессам, использующим DLL что очередь изменилась."
Вопрос: Windows DLL является самостоятельной сущностью, типа процесса? А иначе как DLL может отослать что-то ВСЕМ процессам, ее использующим?


Нет. ДЛЛ это часть процесса ее загрузившего.
Т.е. вызвали функцию из ДЛЛ - обратились к части кода который расположен в адресном пространстве вызывающего процесса.

А под той фразой видимо понимается, что текущий процесс может послать сообщения другим процессам, которые используют эту же ДЛЛ.
Чтобы понять как это может быть реализовано поRTFMте по ф-ции DllMain() и посмотрите на ее код в Вашем проекте.
Или по функции API RegisterWindowMessage().

Цитата
Прошу не пинать ногами и не посылат сразу в MSDN. Я его пытаюсь читать, но эти вопросы ставят меня в тупик.


Почитайте Рихтера "Windows для профессионалов" или хотя бы второй том Петзолда "Програмирование для Win95".
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 03:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01357 секунд с 7
ELECTRONIX ©2004-2016