Сериализация не вызывается
От: volph  
Дата: 10.04.02 05:43
Оценка:
Почему Сериализация не вызывается ?
[code]
if (pFDlg->DoModal() == IDOK) {

CString fname = pFDlg->GetPathName();
CFile * pFile = new CFile(fname, CFile::modeRead);
CArchive ar( pFile, CArchive::load);
Serialize(ar);



}

[code]
Re: Сериализация не вызывается
От: lozzy  
Дата: 10.04.02 06:14
Оценка:
Здравствуйте volph, Вы писали:

V>Почему Сериализация не вызывается ?

V>
V>if (pFDlg->DoModal() == IDOK) {

V>        CString fname = pFDlg->GetPathName(); 
V>        CFile * pFile = new CFile(fname, CFile::modeRead); 
V>        CArchive ar( pFile, CArchive::load); 
V>        Serialize(ar);
V>        
V>        

V>    }
V>    
V>

Может попробовать Serialize(&ar); ?
Re[2]: Сериализация не вызывается
От: volph  
Дата: 10.04.02 06:28
Оценка:
Здравствуйте lozzy, Вы писали:

L>Здравствуйте volph, Вы писали:


V>>Почему Сериализация не вызывается ?

V>>
V>>if (pFDlg->DoModal() == IDOK) {

V>>        CString fname = pFDlg->GetPathName(); 
V>>        CFile * pFile = new CFile(fname, CFile::modeRead); 
V>>        CArchive ar( pFile, CArchive::load); 
V>>        Serialize(ar);
V>>        
V>>        

V>>    }
V>>    
V>>

L>Может попробовать Serialize(&ar); ?

ничего подобного, у меня же

void CVirtListDoc::Serialize(CArchive& ar)
{
   ...    
}
Re: Сериализация не вызывается
От: Igor Soukhov  
Дата: 10.04.02 06:42
Оценка:
Здравствуйте volph, Вы писали:

V>Почему Сериализация не вызывается ?

что значит "не вызывается ?"
* thriving in a production environment *
Re[2]: Сериализация не вызывается
От: volph  
Дата: 10.04.02 06:49
Оценка:
Здравствуйте Igor Soukhov, Вы писали:

IS>Здравствуйте volph, Вы писали:


V>>Почему Сериализация не вызывается ?

IS>что значит "не вызывается ?"

это значит что ОНА НЕ ВЫЗЫВАЕТСЯ, я же не лох, что-бы не понимать этого и не выражаться правильно!!!

Доказательсвто этому то что я вывожу MessageBox а он не выводится


void CVirtListDoc::Serialize(CArchive& ar)
{
    
    MessageBox(NULL,"Serialize","Serialize",MB_OK);
    if (ar.IsStoring())
      ar.SetStoreParams();  // use large defaults
   else
      ar.SetLoadParams()
...
Re[3]: Сериализация не вызывается
От: Igor Soukhov  
Дата: 10.04.02 07:00
Оценка:
Здравствуйте volph, Вы писали:

V>Здравствуйте Igor Soukhov, Вы писали:


IS>>Здравствуйте volph, Вы писали:


V>>>Почему Сериализация не вызывается ?

IS>>что значит "не вызывается ?"

V>это значит что ОНА НЕ ВЫЗЫВАЕТСЯ, я же не лох, что-бы не понимать этого и не выражаться правильно!!!

откуда мне знать лох ты или не лох — главное что у тебя с программированием все ок =)
я тебе помочь хотел — но прошло...
* thriving in a production environment *
Re[4]: Сериализация не вызывается
От: volph  
Дата: 10.04.02 07:05
Оценка:
Здравствуйте Igor Soukhov, Вы писали:

IS>Здравствуйте volph, Вы писали:


V>>Здравствуйте Igor Soukhov, Вы писали:


IS>>>Здравствуйте volph, Вы писали:


V>>>>Почему Сериализация не вызывается ?

IS>>>что значит "не вызывается ?"

V>>это значит что ОНА НЕ ВЫЗЫВАЕТСЯ, я же не лох, что-бы не понимать этого и не выражаться правильно!!!

IS>откуда мне знать лох ты или не лох — главное что у тебя с программированием все ок =)
IS>я тебе помочь хотел — но прошло...
А я тебя узнал! а меня ты узнал wolf^scene Alexander Kulik
Re[5]: Сериализация не вызывается
От: Igor Soukhov  
Дата: 10.04.02 07:17
Оценка:
Здравствуйте volph, Вы писали:

V>Здравствуйте Igor Soukhov, Вы писали:


V>>>это значит что ОНА НЕ ВЫЗЫВАЕТСЯ, я же не лох, что-бы не понимать этого и не выражаться правильно!!!

IS>>откуда мне знать лох ты или не лох — главное что у тебя с программированием все ок =)
IS>>я тебе помочь хотел — но прошло...
V>А я тебя узнал! а меня ты узнал wolf^scene Alexander Kulik
Я просто не забывал — помню всех =) ты опиши — по человечекски вызывается, что нет,
вызывается функция базового класса — или падает в этом месте — или что?
правильно заданный вопрос отвечается тут (на рсдн) за 15 минут.
* thriving in a production environment *
Re[6]: Сериализация не вызывается
От: volph  
Дата: 10.04.02 07:21
Оценка:
Здравствуйте Igor Soukhov, Вы писали:

IS>Здравствуйте volph, Вы писали:


V>>Здравствуйте Igor Soukhov, Вы писали:


V>>>>это значит что ОНА НЕ ВЫЗЫВАЕТСЯ, я же не лох, что-бы не понимать этого и не выражаться правильно!!!

IS>>>откуда мне знать лох ты или не лох — главное что у тебя с программированием все ок =)
IS>>>я тебе помочь хотел — но прошло...
IS>Я просто не забывал — помню всех =) ты опиши — по человечекски вызывается, что нет,
IS>вызывается функция базового класса — или падает в этом месте — или что?
ничего не падает, просто тишина :) просто не вызывается сериализация и все :)
IS>правильно заданный вопрос отвечается тут (на рсдн) за 15 минут.
Re[7]: Сериализация не вызывается
От: Igor Soukhov  
Дата: 10.04.02 07:53
Оценка:
Здравствуйте volph, Вы писали:

V>ничего не падает, просто тишина просто не вызывается сериализация и все

поставь breakpoint на строчку

Serialize(ar);


откомпилируй проект в отладочном режиме. Запусти
отладку — "F5". После того как как отладчик остановится
на breakpoint-е ... трассируй пошагово — так узнаешь что
происходит. Потом отпиши сюда что происходит — будем
разбираться.
* thriving in a production environment *
Re: Сериализация не вызывается
От: BoyEwgraf  
Дата: 10.04.02 11:19
Оценка:
Здравствуйте volph, Вы писали:

V>Почему Сериализация не вызывается ?

V>[code]
V>if (pFDlg->DoModal() == IDOK) {

V> CString fname = pFDlg->GetPathName();

V> CFile * pFile = new CFile(fname, CFile::modeRead);
V> CArchive ar( pFile, CArchive::load);
V> Serialize(ar);
V>
V>

V> }

V>
V>[code]

Дорогой незнакомый друг. Обрати внимание на конструктор CFile:

CFile( );

CFile( int hFile );

CFile( LPCTSTR lpszFileName, UINT nOpenFlags );
throw( CFileException );

Он отнюдь не принимает CString. Написать можно так:

CFile * pFile = new CFile((LPCTSTR) fname, CFile::modeRead);
подобный код у меня работал.
Re[8]: Сериализация не вызывается
От: Юнусов Булат Россия  
Дата: 10.04.02 11:29
Оценка:
Здравствуйте Igor Soukhov, Вы писали:

Вполне возможно там перекрыт обработчик(обработчики) ID_FILE_OPEN ID_FILE_SAVE
Re[2]: Сериализация не вызывается
От: Igor Soukhov  
Дата: 10.04.02 13:01
Оценка:
Здравствуйте BoyEwgraf, Вы писали:

BE>Здравствуйте volph, Вы писали:


BE>Дорогой незнакомый друг. Обрати внимание на конструктор CFile:


BE>CFile( LPCTSTR lpszFileName, UINT nOpenFlags );

BE>throw( CFileException );

BE>Он отнюдь не принимает CString. Написать можно так:


BE>CFile * pFile = new CFile((LPCTSTR) fname, CFile::modeRead);

BE>подобный код у меня работал.
а что CString неявно не конвертится к LPCTSTR ?
* thriving in a production environment *
Re[9]: Сериализация не вызывается
От: Igor Soukhov  
Дата: 10.04.02 13:02
Оценка:
Здравствуйте Юнусов Булат, Вы писали:

ЮБ>Здравствуйте Igor Soukhov, Вы писали:


ЮБ>Вполне возможно там перекрыт обработчик(обработчики) ID_FILE_OPEN ID_FILE_SAVE

судя по всему — он вызывает явно и диалог выбора имени
и функцию серияализации ... так что ...
* thriving in a production environment *
Re[3]: Сериализация не вызывается
От: BoyEwgraf  
Дата: 11.04.02 06:10
Оценка:
Здравствуйте Igor Soukhov, Вы писали:

BE>>CFile * pFile = new CFile((LPCTSTR) fname, CFile::modeRead);

BE>>подобный код у меня работал.
IS>а что CString неявно не конвертится к LPCTSTR ?

Нет. Хотя компилятор пропускает, на деле выходят пустые строки. 8-(
Re[4]: Сериализация не вызывается
От: Igor Soukhov  
Дата: 11.04.02 06:53
Оценка:
Здравствуйте BoyEwgraf, Вы писали:

BE>>>CFile * pFile = new CFile((LPCTSTR) fname, CFile::modeRead);

BE>>>подобный код у меня работал.
IS>>а что CString неявно не конвертится к LPCTSTR ?
BE>Нет. Хотя компилятор пропускает, на деле выходят пустые строки. 8-(
ты не прав.
* thriving in a production environment *
Re[5]: Сериализация не вызывается
От: BoyEwgraf  
Дата: 11.04.02 08:09
Оценка:
Здравствуйте Igor Soukhov, Вы писали:

IS>Здравствуйте BoyEwgraf, Вы писали:


BE>>>>CFile * pFile = new CFile((LPCTSTR) fname, CFile::modeRead);

BE>>>>подобный код у меня работал.
IS>>>а что CString неявно не конвертится к LPCTSTR ?
BE>>Нет. Хотя компилятор пропускает, на деле выходят пустые строки. 8-(
IS>ты не прав.

И действительно. Я не прав.

CString strHello;
strHello.LoadString(IDS_HELLO);
cout << (LPCTSTR) strHello << endl;
cout << strHello << endl;

и как результат

Hello from MFC!
0077049C
Re[6]: Сериализация не вызывается
От: Igor Soukhov  
Дата: 11.04.02 08:32
Оценка:
Здравствуйте BoyEwgraf, Вы писали:

BE>>>>>CFile * pFile = new CFile((LPCTSTR) fname, CFile::modeRead);

BE>>>>>подобный код у меня работал.
IS>>>>а что CString неявно не конвертится к LPCTSTR ?
BE>>>Нет. Хотя компилятор пропускает, на деле выходят пустые строки. 8-(
IS>>ты не прав.

BE>И действительно. Я не прав.


BE>CString strHello;

BE>strHello.LoadString(IDS_HELLO);
BE>cout << (LPCTSTR) strHello << endl;
BE>cout << strHello << endl;

BE>и как результат


BE>Hello from MFC!

BE>0077049C
это доказывает лишь одно — в у cout нет переопределенного
оператора << с аргументом типа LPCTSTR. Вот если бы был —
то CString неявно конвернулся бы к LPCTSTR. А раз нет —
так он в LPCTSTR не конвертится.

в этом случае:

Hello from MFC!


ты cout выводит basic_string который неявно создается из LPСTSTR строки

0077049C


в этом случаем LPCTSTR приводится к void *.
* thriving in a production environment *
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.