Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2010, 23:32   #1
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию MFC && WinApi

Проблема в следующем.

Есть проект, где используются винапишные функции и следовательно подключена windows.h. Встала необходимость использовать в нем класс CFile (MFC), при попытке подключить afx.h и объявить объект класса CFile компилятор ругается матом.

Код:
> error C2146: syntax error : missing ';' before identifier 'cFileOut'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Код:
 Error directive: WINDOWS.H already included.  MFC apps must not #include <windows.h>
Можно как-нибудь безболезненно использовать в проекте MFC?
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 06.02.2010, 00:11   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2nazavrik
читать умеешь?

Цитата:
Error directive: WINDOWS.H already included. MFC apps must not #include <windows.h>
ты пишешь на мфц, а в мфц не включается напрямую windows.h (там afxwin или что то подобное, которое уже включает windows.h). просто используй винапи свой, без дополнительных включений/исключений.

аа, если ты в прогу на винапи хочешь добавить поддержку мфц, то боюсь просто так не получится. так или иначе, все сведется к mfc-шному проекту.
ппс. чем тебе так необходим CFile, чего нельзя сделать через плюсовые поточные файлы, или сишные дескрипторы файлов?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 06.02.2010 в 00:14.
pproger вне форума Ответить с цитированием
Старый 06.02.2010, 00:28   #3
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

У меня есть винапишный проект. Задание такое - желательно организовать работу с файлами через CFile.

Суть в следующем. Если вместо всего перечисленного использовать #include <afxwin.h>, то все хорошо компилится пока не объявлять какой-нить MFCшный класс.

Если я объявляю объект:

Код:
CFile f;
Выводится:

Код:
error C2065: 'CFile' : undeclared identifier
error C2146: syntax error : missing ';' before identifier 'f'
error C2065: 'f' : undeclared identifier
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 06.02.2010, 00:35   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

ну попробуй везде, где включается windows.h включить afxwin.h, чтобы напрямую включений windows.h не было
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 06.02.2010, 01:10   #5
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

Я так и сделал В precompiled header заменил windows.h на afxwin.h.
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 06.02.2010, 14:44   #6
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Джентльмены, вообще-то, должен заметить, что попытка приплести ОО-библиотеку к программе, написанной в процедурном стиле, это как-то... не слишком элегантно Lack of consistency получается. Потеря общности. Плюс, конкретно для MFC, добавление классов без чёткого представления, какие родительские классы они потянут за собой, - сродни походу по минному полю.

Но если уж слишком припекло... Какая версия Visual Studio? 6-я?
Vago вне форума Ответить с цитированием
Старый 06.02.2010, 14:56   #7
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

Мадемуазель, хочу заметить, что программа ни разу не написана в процедурном стиле.

VS2008
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 06.02.2010, 16:25   #8
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от nazavrik Посмотреть сообщение
Мадемуазель
))))) Даже персонаж "ТББ" с похожим именем был мужчиной. Не говоря уж о том, что в романских языках существительные на "о" - обычно мужского рода

Цитата:
Сообщение от nazavrik;
программа ни разу не написана в процедурном стиле.
То есть, WinMain() и WndProc() уже обёрнуты в какие-то классы? Тогда, боюсь, добиться результата будет ещё труднее.

Цитата:
Сообщение от nazavrik;
VS2008
Этой штуки установленной нет. Но, повторяю, ежели припекло, можем поэкспериментировать.

1. Убираем для начала все упоминания о precompiled header.
1.1. Убираем из проекта файлы StdAfx.cpp и StdAfx.h.
1.2. Везде, где оно встречается, #include "stdafx.h" меняем на #include <windows.h>.
1.3. Убираем пока (комментим хотя бы) любые попытки привнести что-то из MFC.
1.4. Говорим, что проект не будет использовать precompiled-headers (Project | Settings... | C/C++ | Category: Precompiled Headers | + Not using precompiled headers | <OK> ) Что-то в этом духе.
1.5. Rebuild All.

Построился exe-шник?

Added 16:06 CET
2. Первый маленький шажок к MFC.
2.1. Меняем везде #include <windows.h> на #include <afxwin.h>.
2.2. Из MFC пока по-прежнему ничего не включаем.
2.3. Rebuild All.
Должен построиться exe-шник.

3. Второй маленький шажок к MFC.
3.1. Возвращаем (вставляем) CFile.
3.2. Rebuild All.
Идеальный вариант - трансляция прошла; unresolved external symbols на редактировании.

4. Третий маленький шажок к MFC.
4.1. Разрешаем использование MFC (Project | Settings... | General | Microsoft Foundation Classes: Use MFC in a Shared DLL | <OK>) В 2008 уже по-другому, но принцип - этот.
4.2. Rebuild All
Идеальный вариант - созданный exe-шник

А что на самом деле получилось?

Последний раз редактировалось Vago; 06.02.2010 в 18:06.
Vago вне форума Ответить с цитированием
Старый 06.02.2010, 18:31   #9
BioS
Пользователь
 
Регистрация: 06.02.2007
Сообщений: 42
По умолчанию

у меня тоже есть впрос по MFC

ситуация похожая - есть небольшая програмка на winAPI с двумя окошками и парой кнопок

хочу добавить диалог - для простоты так

CDialog dlg( IDD_PROP_DLG );
dlg.DoModal(); - тут вылезает ошибка

при этом если создавать новый проект, то там работает


ничего кроме подключения afxwin.h и "Use MFC in a Shared DLL" делать не надо?
BioS вне форума Ответить с цитированием
Старый 06.02.2010, 18:51   #10
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Щас придёт первооткрыватель ветки и скажет нам всё, что он думает по поводу обсуждения здесь НЕ ЕГО проблем...

П.п. 1.1 и 1.4 выполнялись? Я добавил эти две MFC-строчки к простенькому скелету Win32 API (положив, естественно, отфонарный IDD_PROP_DLG ). Трансляция и компоновка прошли.
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
INDY 10 (idCmdTCPServer & idCmdTCPClient) & Delphi 2009 S_Yevgeniy Работа с сетью в Delphi 24 27.02.2012 08:56
TForm & TImage & PNG & Прозрачность delphi_beginner Общие вопросы Delphi 7 19.09.2009 08:46
Просто не понимаю б чём проблема!!!!!!!(char* && index) artush1984 Общие вопросы C/C++ 12 30.05.2009 03:30
dsound.h & MFC Varbar Общие вопросы C/C++ 0 06.03.2009 22:00