Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Доступ к глобальной памяти в MS VC++


Автор: Fixin 6.1.2004, 19:28
Как получить доступ к глобальной памяти в MS VC++, ведь структура форточек дает доступ указателям только в своем собственном адр. пространстве для каждой программы.

Автор: mr.DUDA 7.1.2004, 22:22
Использовать длл с разделяемыми (shared) сегментами и специальными функциями для доступа к таким сегментам. Грузим такую длл-ку в адресное пространство двух разных процессов - и пожалуйста, данные можно передавать из процесса в процесс (как вариант - использовать shared-переменную как буфер для организации доступа к любым ячейкам памяти любого из процессов).

Автор: Fixin 8.1.2004, 18:30
Спасибо за ответ, но у меня нет такого опыта, может какой-нибудь мини-примерчик?

Автор: mr.DUDA 8.1.2004, 21:41
Пример:

1) код из my.dll:
Цитата
#pragma data_seg(".MYSEG")
DWORD    g_dwSomeGlobalData;
#pragma data_seg ()
#pragma comment(linker, "/SECTION:.MYSEG,RWS")

extern "C" __declspec(dllexport)
DWORD ReadGlobalVar()
{
  return g_dwSomeGlobalData;
}

extern "C" __declspec(dllexport)
void WriteGlobalVar(DWORD dwNewValue)
{
  g_dwSomeGlobalData = dwNewValue;
}


2) код из EXE, использующий разделяемую между процессами переменную g_dwSomeGlobalData:
Цитата
void SomeDemoExeFunc()
{
    HINSTANCE hDll = LoadLibrary("my.dll");
    DWORD (*lpfnReadGlobalVar)() = (DWORD(*)()) GetProcAddress(hDll, "ReadGlobalVar");
    void (*lpfnWriteGlobalVar)(DWORD) = (void(*)(DWORD)) GetProcAddress(hDll, "WriteGlobalVar");
   
    // some example of read
    DWORD dwCurrValue = (*lpfnReadGlobalVar)();
   
    // some example of write
    (*lpfnWriteGlobalVar)(++dwCurrValue);
}

Автор: Fixin 9.1.2004, 18:41
Спасибо за обучение, сейчас попробую!

Автор: Fixin 11.1.2004, 18:34
Спасибо, конечно, за это, но вообще я имел ввиду всю память компьютера, а эта прога позволяет только обмен между двумя процессами, которые оба загрузили эту библиотеку, или я чего не понял?

Короче, хочу узнать как работает ArtMoney.

Автор: mr.DUDA 11.1.2004, 19:32
Тогда нужно смотреть MSDN по ф-циям DebugActiveProcess / ReadProcessMemory / WriteProcessMemory. Или идти на wasm.ru и читать статьи по распределению памяти в Win32, по VMM и т.п.

Автор: neurocod 4.2.2004, 19:48
Можно обойтись без DLL при помощи CreateFileMapping - пример в MSDN

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)