Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > множество проблемм со строковыми типами


Автор: P111GR1M 5.4.2007, 19:25
Здраствуйте! Программирую на VC++2005
Возникло множество проблем со строковыми типами в связи с переходом с VC++2003
Код
try
{
  CStdioFile file( _T("c:\\test.txt"), CFile::modeRead || CFile::typeText );
  CString buf;
  file.ReadString( buf );  // здесь вызывается исключение и пишет "неизвесная ошибка". Почему??
  AfxMessageBox( buf );
  file.Close();
}
catch( CFileException* pe )
{
  pe->ReportError();
}

Еще вот:  '_access' : cannot convert parameter 1 from 'LPCTSTR' to 'const char *'
Код
public:
    static BOOL FileExists(LPCTSTR lpszFileName) 
    {
        return (0 == (_access(lpszFileName, 4)));
    }


Помогите, просто руки опускаются

Автор: Earnest 5.4.2007, 19:37
Видимо у тебя проект теперь в Юникоде. А текст в файле нет... Проверь настройки проекта (General->Character Set)и убери Юникод.

Автор: P111GR1M 5.4.2007, 19:50
Earnest, не помогло  smile 

Автор: Earnest 5.4.2007, 20:01
Цитата(P111GR1M @  5.4.2007,  20:25 Найти цитируемый пост)
cannot convert parameter 1 from 'LPCTSTR' to 'const char *'

И этому тоже? Да не может быть... 
А ты после изменений свойств перестроил проект заново?

Автор: P111GR1M 6.4.2007, 17:41
Цитата

Цитата(P111GR1M @  5.4.2007,  20:25 )
cannot convert parameter 1 from 'LPCTSTR' to 'const char *'


И этому тоже? Да не может быть... 

Этому помогло, спасибо

Автор: Earnest 6.4.2007, 17:54
Если ошибка при чтении файла осталась, то придется дебажить: пройди по шагам и посмотри откуда она.

Автор: byNet 12.2.2008, 17:33
мне лично помогло, огромное спасибо

Автор: Miyka 25.4.2009, 12:02
Ап. Ибо у меня пишет 
error C2664: 'MyBMP::Draw' : cannot convert parameter 1 from 'CDC *' to 'CDC'

Проект MFC. Ошибка ссылается на 
Код

void CiOpenView::OnDraw(CDC *pDC)
{
    CiOpenDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc) 
        return;

    // TODO: add draw code for native data here
    pDoc->ozbmp.Draw(pDC,NULL); <------ сюда
}


Не могу понять что происходит. Пробовал Not set, Unicode и Multi-byte. Не помогает.

Автор: Albor 25.4.2009, 13:51
Цитата(Miyka @  25.4.2009,  12:02 Найти цитируемый пост)
cannot convert parameter 1 from 'CDC *' to 'CDC'

Нет, ни чего не поможет! Компилятор не знает как можно использовать указатель вместо объекта. Это уж исправьте сами.

Автор: Miyka 25.4.2009, 14:34
Но как так то? Вот программа у соседа и тот же код запускается. 
Может это вечный бой Vista vs XP? Но если нет то в чем еще может быть проблема или я совсем нубос?

Автор: Lazin 25.4.2009, 15:26
Код

pDoc->ozbmp.Draw(*pDC,NULL);


Цитата(Miyka @  25.4.2009,  14:34 Найти цитируемый пост)
Но если нет то в чем еще может быть проблема или я совсем нубос? 

совсем smile 

Автор: Miyka 25.4.2009, 15:29

О да, все кардинально изменилось:
error C2664: 'MyBMP::Draw' : cannot convert parameter 1 from 'CDC' to 'CDC *'
может еще есть варианты? 

З.Ы. Lazin согласен, но не столько... хотя не знаю)

Автор: Lazin 25.4.2009, 16:37
Сейчас неудачное положение звезд, у меня не получается прозреть реализацию MyBMP в твоем исходнике smile 

Автор: Albor 25.4.2009, 21:57
Цитата(Miyka @  25.4.2009,  12:02 Найти цитируемый пост)
pDoc->ozbmp.Draw(pDC,NULL); <------ сюда

Данная строчка выглядит странновато: получается что класс вида обращается к объекту документа, чтобы тот нарисовался сам. 

Цитата(Lazin @  25.4.2009,  16:37 Найти цитируемый пост)
прозреть реализацию MyBMP в твоем исходнике
 И мне интересно, почему же компилятору не нравится ни то ни другое.

Автор: Miyka 25.4.2009, 23:17
Albor, код должен нарисовать квадратик 100 на 100 серого цвета.

Код

BOOL Draw(CDC *pDC, RECT *pRect)
{
    pDC->FillSolidRect(0,0,100,100,0xFF0000);
    return true;
}



Это в сср файле моего класса.

может я что то где то не объявил, но блина у соседа работает.  smile 

Автор: Albor 26.4.2009, 06:37
Да вроде всё правильно, функция ждёт указатель. Проверь ещё в заголовочном файле MyBMP.h  smile объявление этой функции, причина ведь какая-то должна быть.

Автор: Miyka 26.4.2009, 11:02
Albor, я с тобой согласен, потому что есть проблема в .h файле и когда объявляю фию таким образом:
Код

BOOL Draw(CDC, RECT);

ругается, говорит что 
error C2664: 'MyBMP::Draw' : cannot convert parameter 1 from 'CDC' to 'CDC *', а если объявить вот так, как у соседа:
Код

BOOL Draw(CDC *pDC, RECT *pRect);

пишет другую ошибку
error LNK2019: unresolved external symbol "public: int __thiscall MyBMP::Draw(class CDC *,struct tagRECT *)" (?Draw@MyBMP@@QAEHPAVCDC@@PAUtagRECT@@@Z) referenced in function "public: virtual void __thiscall CiOpenView::OnDraw(class CDC *)" (?OnDraw@CiOpenView@@UAEXPAVCDC@@@Z)
что для меня набор слов




Автор: Albor 27.4.2009, 07:03
Второй прототип должен быть в h файле. Попробуй сделать Rebuild All, бывает помогает.

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