Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Использованеи shared_array,shared_ptr...


Автор: Druidoff 16.2.2008, 16:51
Народ помогите как обернтуть в смартопоинер массив Структур, У мя то ошибки какието выкидывает, то пога при дебаге вылетает, и чете читал я документацию ни че не понял:
Вот так я делаю:



boost::shared_array<WTS_PROCESS_INFO*> procinfo(new WTS_PROCESS_INFO*,WTSFreeMemory); 
Вроде пре дебаге на матерится
потом:
вызываю функция 
DWORD procCount;
if (WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE,0, 1,procinfo.get(), &procCount)==0 )
{ 
printf("\nErro enum sess %d",GetLastError());
}
Все пока нормально!!
А кода пытаюсь обратится уже к полям струтуры:
например 

printf("%s"W2A( procinfo.operator [](1)->pProcessName));

то при дебаге Вылетает ошибка "Access violation reading location"!!!
Обясните в че я не прав, Желательно на примере!!!!
Пасиба!!

Автор: Fazil6 16.2.2008, 20:34
например так


Код

const int WTS_PROCESS_INFO_SIZE = 100; // например такой нам нужен размер

typedef boost::shared_array<WTS_PROCESS_INFO> WPIArray;


WPIArray procinfo(new WTS_PROCESS_INFO[WTS_PROCESS_INFO_SIZE],WTSFreeMemory); 

WTS_PROCESS_INFO wp;

procinfo[1] =  wpi;

printf("%s"W2A( procinfo[1].pProcessName));



Автор: Druidoff 16.2.2008, 22:22
Извените  за такую безграмотность я делаю так


const int WTS_PROCESS_INFO_SIZE = 100; // например такой нам нужен размер
typedef boost::shared_array<WTS_PROCESS_INFO> WPIArray;

Потом вызываю 
WPIArray procinfo(new WTS_PROCESS_INFO[WTS_PROCESS_INFO_SIZE],WTSFreeMemory); 

    if (WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE,0, 1,procinfo.get(), &procCount)==0 )
        {    
            printf("\nErro enum sess %d",GetLastError());
        }
оно выдает мне ошибку  не может преобразовать параметр 4 'WTS_PROCESS_INFOW *' to 'PWTS_PROCESS_INFOW *' 
я уже нече не понимаю: 
Сто пудово работает так:

WTS_PROCESS_INFO *procinfo;
if (WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE,0, 1,&procinfo, &procCount)==0 )
        {    
            printf("\nErro enum sess %d",GetLastError());
        }

И хотелось его обернуть в смарт-поинтер потому-что используются  exception
А как юз смартопоитер  я че то воще запутался!!  smile 

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