информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsГде водятся OGRыSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
[C++] Ерунда какая то 12.08.02 17:17  
Автор: vh <Дмитрий> Статус: Member
<"чистая" ссылка>

Помогите пожалуйста разобраться. Я уже ничего не понимаю.
1. Есть приложение написано на VC++ для MFC с использованием AppWizard
там она создает класс что то типа CProgaApp theApp и делает его глобальным. Но почему то я не могу к нему достучаться из какойлибо функции CProgaDlg.. :(
2 .как в принципе сделать глобальную переменную?
3. допустим класс CFirst
class CFirst {
public:
//...
CSecond A;
//...
};
class CSecond {
func();
};
CSecond::func() {/*кaк отсюда обратиться к какой-либо переменной или функции из CFirst?*/ };

возможно я сильно глючу
[C++] Ерунда какая то 12.08.02 20:36  
Автор: beLIEve Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> 3. допустим класс CFirst
> class CFirst {
> public:
> //...
> CSecond A;
> //...
> };
> class CSecond {
> func();
> };
> CSecond::func() {/*кaк отсюда обратиться к какой-либо
> переменной или функции из CFirst?*/ };
поробуй func() сделать френдовской для CFirst. Сам я ИМЕННО так не делал, но думаю может прокатить ИМЕННО в этом примере ;)
>
> возможно я сильно глючу
возможно я тоже
[Win32] советую разобраться с моделью приложения,принятой в mfc,а так же с архитектурой document/view 12.08.02 18:15  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
юзай AfxGetApp() для полученя указателя на класс приложения
в твоем случае енто класс CProgaApp
в основном при отображении работа идет в классах C*View
для получения указателя на класс документа юзай GetDocument()
в АppWizard я сделал Dialog-Based...поэтому у меня просто нету CProgaView 12.08.02 19:08  
Автор: vh <Дмитрий> Статус: Member
<"чистая" ссылка>
[C++] дык я же говорю - используй AfxGetApp() 13.08.02 01:29  
Автор: beetle <beetle> Статус: Member
Отредактировано 13.08.02 01:40  Количество правок: 1
<"чистая" ссылка>
Dialog base project содержит только две заготовки по дефолту:
CYourNameApp - стандартный класс каркаса приложения
CYourNameDlg - непосредственно клас диалога
для получения указателя на екземпляр класса приложения из класса диалога CYourNameDlg делается след:
CYourNameApp* pApp = AfxGetApp();
и юзай себе все, что душе угодно и где угодно
для доступа к объекту диалога следует:
создать в классе CYourNameApp атрибут-указатель на класс твоего диалога
и потом проинициализировать его непосредственно при создании диалога - в функции InitInstanse:
OOL CPhMngrApp::InitInstance()
{
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.

#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif

CPhMngrDlg dlg;//вот тут и инициализируй свой поинтер на диалог
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}

// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}
[C++] Гон! Смотри, в чем дело: 13.08.02 04:15  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
VC каждый класс пишет в своем cpp-файле. Чтобы увидеть
переменную, объявленную в хедере приложения, нужно ее в этих файлах объявить, как external.
Прекрати бредить. 13.08.02 10:12  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
> VC каждый класс пишет в своем cpp-файле. Чтобы увидеть
> переменную, объявленную в хедере приложения, нужно ее в
> этих файлах объявить, как external.

Бла бла бла... А MS такие дураки сидят, не могли экстерналом переменную обявить, да ?
Человек правильно написал AfxGetApp() и никаких извращений. То что ты предложил - в принципе верно, но с mfc я бы не рекомендовал делать шаги вправо, влево. Не переносит mfc этого.
[C++] Не знаю, я сразу нашел этот способ, он работает, а в других мне нужды нет... 14.08.02 04:59  
Автор: Zef <Alloo Zef> Статус: Elderman
Отредактировано 14.08.02 05:26  Количество правок: 2
<"чистая" ссылка>
А что до мфсей, то если не лень, я их целиком никогда не юзаю. Там всяких проверок ненужных целый вагон, например он волочит за собой куски ОЛЕ, даже если всеми "законными" средствами ему это запрещаешь. Так, что я выдираю только те куски, которые используюся моей прогой, обрубаю все тесты, кроме самых нужных, неиспользуемые кейзы и условные переходы. Конечно, если пишешь MDI-ную прогу с крутым интерфейсом, то это непосильный труд, Но для диалог-базед утилти в самый раз, тем более, что VC не Борланд, он визуальное конструирование почти не автоматизирует и все контролы приходится прогать вручную.
Ну, а в Мелкософте, действительно, не дураки они специально "слегка" путают код и пропускают в хелпах ключевые моменты (см. мой пост про компиляцию драйверов), чтобы не ковыряясь, сходу мог что-то делать только тот, кто прошел ихние курсы и ему показали "на пальцах" всю цепочку необходимых операций, ничего не объясняя. Кроме того, это защищает их от всяких "внеплановых" подходов.
Кто-нить пробовал компилить MFC из сырцов? Хрен получится! Хотя дебагер их "видит" правильно. А, чтобы их перекомпилить, и настройки компилера надо менять и, похоже, не все инклюды в сырцах прописаны...
[C++] тогда лучше использовать namespases - с external linker может ругаться - видимо у него так и произошло 13.08.02 05:47  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach