Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AccessViolationException 
V
    Опции темы
Elfet
Дата 19.5.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



 всем привет! 
Проблема с памятью: 
Цитата
Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.

Помогите, пожалуйста, разобраться. 

Эта ошибка выскакивает у меня в программе на C#. Вот тут:
Код

SFCLib.IRender render = solver;

                int nodesCount = 0;
                render.GetNodesCount(out nodesCount);


В этом коде я пытаюсь получить целое число из COM:
Код

interface IRender : IUnknown 
{
    HRESULT GetNodesCount([out] int *count);
}

...


//IRender
STDMETHODIMP CSolver::GetNodesCount(int *count)
{
    *count = solver->mesh->nodes->size();    
    return S_OK;
}


В чём может быть проблема? Как её решить?  smile 

Это сообщение отредактировал(а) Elfet - 19.5.2009, 21:32


--------------------
PM MAIL WWW Skype   Вверх
Andrey44
Дата 19.5.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



Код

SFCLib.IRender render = solver;
                int nodesCount = 0;
                render.GetNodesCount(out &nodesCount);

Я в С# конечно не силен но все-же

Добавлено через 1 минуту и 58 секунд
Или render может быть не создался


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Elfet
Дата 19.5.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Нет, так в C#. 
Тут какая-то проблема связи управляемой и неуправляемой памяти. 
А вот строчки нормально передаются:
Код

STDMETHODIMP CSolver::GetErrorMsg(BSTR *error)
{
    // конвентируем сначала в CString, затем в BSTR
    CString cstr(errorLog->GetError().c_str());
    *error = cstr.AllocSysString();
    return S_OK;
}



--------------------
PM MAIL WWW Skype   Вверх
Elfet
Дата 19.5.2009, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Кажется нашёл проблему:
*count = solver->mesh->nodes->size(); 
Если заменяю на:
*count = 1; - то всё ок.

solver->mesh->nodes - это вектор vector<Node*>*
Как я понимаю size() должна вернуть size_type const; В моём случае size_type = int. и должно быть всё хорошо, но видимо что-то я не так делаю  smile 


--------------------
PM MAIL WWW Skype   Вверх
Elfet
Дата 19.5.2009, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



 smile  smile 5 часов убил. В результате выяснил в чём было дело - я дурак.  smile 
 
Я инициализировал объект только после загрузки файла, а рендрить пытался сразу.

Всем спасибо!


--------------------
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0602 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.