Проблема выделения памяти в DLL / C++
От: FlameStorm Земля ya.ru
Дата: 15.12.06 20:27
Оценка:
Из EXE вызывается функция в DLL, которая должна выделить память:

EXE:
typedef dword (__fastcall * GetModuleInfoFUNC)(MYTYPE **infobuf);

...
      MYTYPE *pinfo = NULL;

      GetModuleInfoFUNC GetModuleInfo =
         (GetModuleInfoFUNC)
         GetProcAddress(hdll, "GetModuleInfo");

      GetModuleInfo(&pinfo);
...


DLL:
...
MYAPI dword __fastcall GetModuleInfo(sModuleInfo **infobuf)
{
   *infobuf = (sModuleInfo *) GlobalAlloc(GPTR, sizeof(sModuleInfo)); // <<< ЗДЕСЬ ПРОБЛЕМА.
   **infobuf = modinfo; //(запись данных)
   return 0;
}

...


Проблема: ...exception at 0x000182c8 ...: 0xC0000005: Acc. viol. reading location 0x000182c8.

Функции из библиотеки вызываются нормально, но выделять память не хочет. Без разницы new, malloc, GlobalAlloc, LocalAlloc, HeapAlloc...
т.е. например

   *infobuf = (sModuleInfo *)-1;
   return 0;

функционирует.

Гуглил, смотрел статьи rsdn, но не нашёл то что искал.

18.12.06 13:27: Перенесено модератором из 'C/C++' — Кодт
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.