Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с UpdateData(TRUE) 
:(
    Опции темы
NewLine
Дата 8.10.2006, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 19.5.2006

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



Привет всем.
Вот така проблемма.
Есть функция.
Код

void CMainFrame::OnSend(CString s)
{
UpdateData(TRUE);
m_msg="test";
       if(!m_ptrComSocket->Send((void *)m_msg.GetBuffer(m_msg.GetLength()), m_msg.GetLength())){
    AfxMessageBox(MSG_SOCKET_SEND_FAIL);
    }
}


Так вот если я ее вызываю из того же класса, то все замечательно, а если из другого
Код

void WinMess::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
UpdateData(TRUE);
    CString ch=(CString)nChar;
[B]CMainFrame MainClass;
MainClass.OnSend(ch);[/B]
}


То программа вываливается полность.
Я думаю это из-за вызова UpdateData(TRUE) в void CMainFrame::OnSend(CString s).
Но не знаю что нужно изменит чтоы все было в порядке.
Кто знает подскажите пожалуйста.
спасибо.
--------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система
PM MAIL   Вверх
Greeen
Дата 8.10.2006, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 710
Регистрация: 13.8.2006
Где: Петербург

Репутация: 10
Всего: 18



Что за класс WinMess?
UpdateData - член класса CWnd.
Если WinMess - наследник CWnd, то ты можешь его вызывать, иначе - нет.


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
NewLine
Дата 9.10.2006, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 19.5.2006

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



По-моему все же классы в тои или иной степени являются производными от CWnd.
У меня есть MDI приложение.
Класс WinMess:  class WinMess : public CEditView открывается в этом приложениии.
--------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система
PM MAIL   Вверх
Earnest
Дата 9.10.2006, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(NewLine @  8.10.2006,  19:17 Найти цитируемый пост)
CMainFrame MainClass;
MainClass.OnSend(ch);

Вот твоя проблема, она же бессмысленный кусок кода.
Как минимум UpdateData (и не только она) предполагает, что вызывается для окна, а не для пустого объекта!
Кстати, программа должна не падать, а выводить AssertFailed, и пойдя по Retry ты вполне можешь посмотреть в чем проблема.
Что тебе делать - зависит от того, что ты хочешь получить.
Я подозревая (исходя из названия класса), что ты хочешь вызвать OnSend для главного окна. А оно одно! И получить его в любой момент можно с помощью AfxGetMainWnd(). Только нужно преобразовать к нужному типу:
static_cast<CMainFrame*>(AfxGetMainWnd())->OnSend();
Это будет работать, если CMainFrame - действительно главное окно.


--------------------
...
PM   Вверх
NewLine
Дата 9.10.2006, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 19.5.2006

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



Спасибо большое Earnest.
Ты просто умничка.
--------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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