Форум: "Основная";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
ВнизПеременные в DLL. Найти похожие ветки
← →
novice__man (2004-12-02 17:42) [0]Ув. мастера, подскажите плиз, возможно ли сделать так, что бы при вызове библиотеки разными программами иметь доступ к занчению переменной, при изменении переменной одной программой, это изменение можно было увидеть из другой программы при подключении библиотеки.
← →
Александр Иванов © (2004-12-02 17:56) [1]Один из вариантов: Описать, глобально, переменную и написать интерфейс доступа к ней(процедуру для изменения и функцию для получения значения).
← →
Просто Джо © (2004-12-02 17:57) [2]Использовать файлы, отображенные в память (CreateFileMappingEx). Примеров полно
← →
Александр Иванов © (2004-12-02 17:58) [3]Прошу прощения, запарился :).
← →
Просто Джо © (2004-12-02 18:02) [4]здесь -Ex - лишнее ;)
Еще раз:
CreateFileMapping/OpenFileMapping
MapViewOfFile(Ex)
← →
novice__man (2004-12-02 18:02) [5]Просто Джо © (02.12.04 17:57) [2]
Пока на этом остановлся.
Видимо прийдется так и делать!
← →
Просто Джо © (2004-12-02 18:03) [6]novice__man (02.12.04 18:02) [5]
>> Видимо прийдется так и делать!
А что так скептически? Это очень удобный и совершенно законный способ. Что называется "без извращений".
← →
novice__man (2004-12-02 18:12) [7]Просто Джо © (02.12.04 18:03) [6]
Пока еще ни разу не занимался этим вопросом.
← →
Yuri-7 (2004-12-02 23:05) [8]В DLL пишешь:
...
var1: integer;
var2: shortstring;
exports var1,var2;
В вызывающей программе:
...
var
pvar1: Pinteger;
pvar2: Pshortsring;
...
begin
Handle := LoadLibrary("test.DLL");
pvar1:=GetProcAddress(Handle, ‘var1’);
pvar2:= GetProcAddress(Handle,‘var2’);
..
end;
Далее pvar1^ и pvar2^ можно использовать, как значения переменных для считывания и записи.
← →
palva © (2004-12-02 23:26) [9]А если адрес одной из этих переменных вернет какая нибудь функция из DLL, можно ли этим адресом воспользоваться в основной программе? Иными словами общее ли у этих загрузочных модулей адресное пространство?
← →
Yuri-7 (2004-12-03 05:38) [10]Похоже, что можно. Пространство не общее, у DLL все-таки свое, но доступное
← →
novice__man (2004-12-03 07:31) [11]uri-7 (02.12.04 23:05) [8]
При каждом вызове DLL создается свое адресное пространство (!!!), хотя физически загруженна одна копия библиотеки!!!
Так вот ваш пример не демонстрирует РАСШАРИВАНИЯ ресурса в библиотеке!
А с доступом к ресурсам, функциям, процедурам ОДНОГО экземпляра проблем не существует.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c