Глобальные (широкие) свойства в Win32 - PullRequest
1 голос
/ 22 сентября 2009

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

Я хочу иметь возможность связать ключ с некоторыми данными в одной части приложения, а затем извлечь эти данные, указав соответствующий ключ в какой-то другой части приложения. В некотором смысле можно сказать, что я искал что-то похожее на Java System.setProperty () / getProperty ().

Я был уверен, что API-интерфейсы процесса дадут мне некоторый доступ к буферу всего процесса, но мне не повезло. Есть идеи?

(Я знаю, что чистое решение состоит в том, чтобы ввести новую DLL и правильно связать ее с существующими DLL. К сожалению, этот тип решения выходит за рамки полномочий моей команды).

Ответы [ 2 ]

1 голос
/ 22 сентября 2009

Для этого вам не нужны красивые API. Windows имеет гораздо более старый API именно для такого рода вещей. Эти вещи известны как «атомы». Вы бы использовали функции как AddAtom и FindAtom. По умолчанию атомы охватывают весь процесс.

0 голосов
/ 22 сентября 2009

Для ясности здесь есть один exe с несколькими DLL только в одном процессе, но с несколькими модулями. Таким образом, вы не ищете межпроцессное взаимодействие.

В ответ я вижу две стратегии:

  1. использовать атомы Windows API, которые немного ограничены (в основном только строковые данные), которые могут работать внутри или между процессами.

  2. Если вы пишете DLL, которая содержит ваши предполагаемые функциональные возможности SetProperty / getproperty, вам не нужно снова компилировать ВСЕ другие DLL (что, по-видимому, выходит за рамки спецификации вашей команды) - вам нужно только перекомпилировать эти DLL которые в настоящее время используют ваши новые функции (set / getproperty) (что, по-видимому, зависит от вашей команды). Так что это кажется прямым и мощным решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...