Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |
[C++] ATL + MFC problems 10.09.01 22:52 Число просмотров: 969
Автор: + <Mikhail> Статус: Elderman
|
> Всем хай. > > Недавно писал один ATL COM на VC7.NET и столкнулся с такой > проблемой: > в коме я юзал сокеты и когда перекомпиливал project со > вслюченным Use MFC as a static library, после запуска любых > функций юзающих сокет (у меня был асинхронный) получал > еггог Memory Access Violition. :(
Tvoia problema v tom chto esli memory allociruatsia na heap (crt ili mfc) togda, esli memory allociruetsia v odnom module (exe ili dll) a delalocyruetsia v drugom - eto problema potomuchto heap vsegda local dlia kazhdogo modula (hotia pointer allocirovannyi etim heapom valid v oboih modulah), PRI USLOVII CHTO TY STACTICHESKI PRILINKOVALSIA (i bez raznicy ATL eto ili VC7.net same BS). I v kazdom module budet svoi foo's dlia raboty s heep i estestvenno svoi heap. Dlia razreshenia etoii problemy libo dinamicheski prilinkuiisia , libo delalocirui pamiat` v tom zhe module gde ty ee i allociroval.
Bot primer (zapusti etu foo v exe i dll i ty uvidish chto heaps raznye):
void heapdump( void )
{
_HEAPINFO hinfo;
int heapstatus;
hinfo._pentry = NULL;
while( ( heapstatus = _heapwalk( &hinfo ) ) == _HEAPOK )
{ printf( "%6s block at %Fp of size %4.4X\n",
( hinfo._useflag == _USEDENTRY ? "USED" : "FREE" ),
hinfo._pentry, hinfo._size );
}
switch( heapstatus )
{
case _HEAPEMPTY:
printf( "OK - empty heap\n" );
break;
case _HEAPEND:
printf( "OK - end of heap\n" );
break;
case _HEAPBADPTR:
printf( "ERROR - bad pointer to heap\n" );
break;
case _HEAPBADBEGIN:
printf( "ERROR - bad start of heap\n" );
break;
case _HEAPBADNODE:
printf( "ERROR - bad node in heap\n" );
break;
}
}
---
> Кто что-нить может подсказать - буду благодарен. :) > > Желаю всем Добра :) > RatiO (root@ratio.dp.ua)
|
|
<programming>
|
[C++] ATL + MFC problems 09.09.01 01:29
Автор: RatiO Статус: Незарегистрированный пользователь
|
Всем хай.
Недавно писал один ATL COM на VC7.NET и столкнулся с такой проблемой:
в коме я юзал сокеты и когда перекомпиливал project со вслюченным Use MFC as a static library, после запуска любых функций юзающих сокет (у меня был асинхронный) получал еггог Memory Access Violition. :(
Кто что-нить может подсказать - буду благодарен. :)
Желаю всем Добра :)
RatiO (root@ratio.dp.ua)
|
 |
[C++] ATL + MFC problems 10.09.01 22:52
Автор: + <Mikhail> Статус: Elderman
|
> Всем хай. > > Недавно писал один ATL COM на VC7.NET и столкнулся с такой > проблемой: > в коме я юзал сокеты и когда перекомпиливал project со > вслюченным Use MFC as a static library, после запуска любых > функций юзающих сокет (у меня был асинхронный) получал > еггог Memory Access Violition. :(
Tvoia problema v tom chto esli memory allociruatsia na heap (crt ili mfc) togda, esli memory allociruetsia v odnom module (exe ili dll) a delalocyruetsia v drugom - eto problema potomuchto heap vsegda local dlia kazhdogo modula (hotia pointer allocirovannyi etim heapom valid v oboih modulah), PRI USLOVII CHTO TY STACTICHESKI PRILINKOVALSIA (i bez raznicy ATL eto ili VC7.net same BS). I v kazdom module budet svoi foo's dlia raboty s heep i estestvenno svoi heap. Dlia razreshenia etoii problemy libo dinamicheski prilinkuiisia , libo delalocirui pamiat` v tom zhe module gde ty ee i allociroval.
Bot primer (zapusti etu foo v exe i dll i ty uvidish chto heaps raznye):
void heapdump( void )
{
_HEAPINFO hinfo;
int heapstatus;
hinfo._pentry = NULL;
while( ( heapstatus = _heapwalk( &hinfo ) ) == _HEAPOK )
{ printf( "%6s block at %Fp of size %4.4X\n",
( hinfo._useflag == _USEDENTRY ? "USED" : "FREE" ),
hinfo._pentry, hinfo._size );
}
switch( heapstatus )
{
case _HEAPEMPTY:
printf( "OK - empty heap\n" );
break;
case _HEAPEND:
printf( "OK - end of heap\n" );
break;
case _HEAPBADPTR:
printf( "ERROR - bad pointer to heap\n" );
break;
case _HEAPBADBEGIN:
printf( "ERROR - bad start of heap\n" );
break;
case _HEAPBADNODE:
printf( "ERROR - bad node in heap\n" );
break;
}
}
---
> Кто что-нить может подсказать - буду благодарен. :) > > Желаю всем Добра :) > RatiO (root@ratio.dp.ua)
|
|
|