Из 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++' — Кодт