Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: VC7. Есть траблы.  (Прочитано 28726 раз)
0 Пользователей и 18 Гостей смотрят эту тему.
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« : 10-11-2003 23:58 » 

Проект:
 весь на Unicode
 dll - global.dll
   obj.dll, экспортирует global
 экзешник экспортирует obj и global.
 
 Собственно траблы следующие:
 1.) при использовании функции double d=_wtof(str). В debug пашет, в release отказывается напрочь. Если сделать double d=_wtof(str.GetBuffer()) - то в релизе считывает только первый символ. Как обойти?
 2.) При конфигурации dll описанной выше, dll'кам даже в релизе необходим весь MFC, что весьма огорчает. Статическая компоновка почему-то не пашет.
 3.) Хотел экспортировать переменные CString. Ноль эмоций от VC. Много думал - экспортнул CAtlString. Может есть более красивое решение?

 4.) Для тех кто писал собственные мастера. Значит - мастер - куча окошек, которые попеременно переключаются. Очень хочется их в памяти не хранить. То есть окошко уничтожилось, следующее создалось. А если мастер и есть основное окно проекта? То есть уничтожается основное окно и происходит выход из проги. Есть ли мысли как это красиво обойти? Я обошел - так - создал невидимое основное окно, может есть более лаконичные и красивые решения?
Записан

Сила ночи, сила дня - одинакого фигня....
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« Ответ #1 : 11-11-2003 21:09 » 

Ау... На все вопросы отвечать не надо. Помогите кто-чем может. Дажде за ответ на один из вопросов буду благодарен...
Записан

Сила ночи, сила дня - одинакого фигня....
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #2 : 11-11-2003 21:29 » 

Цитата

В debug пашет, в release отказывается напрочь.

При таких вещах траблы обычно с не правильным толкованием работы с памятью, а по началу частенько на такое натыкался.
Особенно когда использовал передачи указателей, которые потом уничтожал, но продолжал с ними работать.
В дебаге чаще всего такое прокатывает, ибо память не занимается.

Насчет остального - поподробнее...


Извини - сразу не заметил сообщения - иначе ответил бы раньше.
Насчет мастера - я делал скрытое окно основной программы, а работал только с мастером окошек (но не в VC7) а в 6-ой версии.

Мастер автоматом делал из CPropertyPage & CPropertySheet тогда и голова за переключение не болит - все великолепно настраивается...
Эти странички имеют стиль Wizard и работают отлично...
Код могу копнуть и скинуть.
Записан

А птичку нашу прошу не обижать!!!
grozny
Гость
« Ответ #3 : 11-11-2003 22:18 » 

Цитата

2.) При конфигурации dll описанной выше, dll'кам даже в релизе необходим весь MFC, что весьма огорчает. Статическая компоновка почему-то не пашет.


а конкретнее - чё не пашет, чё делаешь, и пр.
Записан
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« Ответ #4 : 12-11-2003 08:57 » 

Цитата

2.) При конфигурации dll описанной выше, dll'кам даже в релизе необходим весь MFC, что весьма огорчает. Статическая компоновка почему-то не пашет.


Подробнее: Все dll-ки - MFC Extension DLL. Выставляю в проекте - MFC With static Library. В Batch Build выбираю обе основные конфы (дебуг и релиз) и пускаю. Компилиться успешно. Проверяю на включаемые библиотеки прогой depends.exe - куча файлов MFC - необходима при загрузе.

Я наверно что-то неправильно делаю - перебрался на MFC с C++Builder всего 3 месяца назад.
Записан

Сила ночи, сила дня - одинакого фигня....
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #5 : 12-11-2003 08:59 » 

ChaoticCube, наверняка что-то делаешь неправильно - но для ответа надо локализовать проблему...
Для начала попробуй создать простенькую dll с одной функцией и прокопилить ее с тестовым проектом.
Если будет тоже самое, то тогда тект dll сюда для оценки...
Записан

А птичку нашу прошу не обижать!!!
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« Ответ #6 : 12-11-2003 09:09 » 

Цитата

3.) Хотел экспортировать переменные CString. Ноль эмоций от VC. Много думал - экспортнул CAtlString. Может есть более красивое решение?


в общем, как оно и положено dll экспортируют классы. Классы моей бизнс-логики. В классах часто приходиться работать со строками. Само собой - уж коли я хочу работать с MFC то и строки мне нравяться CString. При работе с ними - ошибки типа fatal error.
 Если заменить весь CString на CAtlString - компилиться без проблем.

 То есть проблему то я конечно обошел, но может я что не так делал?
 Короче кусок кода из global.dll:

 global.h
#pragma once
#pragma warning(disable: 4251)

#include <string>
#include <list>
#include <map>
#include <vector>
#include <atlstr.h>

#define EXPORTMODEGLOBAL __declspec(dllexport)
#define EXPORTMODEOBJ __declspec(dllexport)

typedef EXPORTMODEGLOBAL CAtlStringW IEString;

class EXPORTMODEGLOBAL IEObject
{
 protected:
  int Type; //тип объекта
  DWORD IDC; //идентификационный номер, нужен при сборке в файл
 public:
  IEObject* Parent; //указатель на контейнер, где он живет
  //конструторы, деструкторы
  IEObject(void);
  IEObject(const IEObject& Obj);
  IEObject operator=(const IEObject& Object);
  virtual ~IEObject(void);
  //методы
  void GetType(int& Type) const;
  //достать родительскую систему
  static IEObject* GetParentSystem(IEObject* Parent);
  //достать самую высокую систему
  static IEObject* GetSystemHigh(IEObject* Parent);
  //достать критерий, если система с оъектом - характеризующая
  static IEObject* GetCritHigh(IEObject* Parent);
  //установить идентификац. номер
  void SetIDC(const DWORD& i);
  //достать идентификац. номер
  DWORD GetIDC(void) const;
};

//абстрактный класс поименнованного объекта
//имеет коментарий и свойство выбранности
class EXPORTMODEGLOBAL IEName: public IEObject
{
 protected:
  IEString Name; //имя
  IEString Coment; //комментарий
  bool Select; //свойство выбранности
 public:
  //конструкторы, деструторы
  IEName(void);
  IEName(const IEName& Name);
  IEName operator=(const IEName& Name);
  virtual ~IEName(void);
  //методы
  void SetName(const IEString& Name);
  void GetName(IEString& Name) const;
  void SetComment(const IEString& Comment);
  void GetComment(IEString& Comment) const;
  void SetSelect(const bool& Select);
  bool CheckSelect(void) const;
};

 Тот самый IEString - на нем вся прога пашет.
Записан

Сила ночи, сила дня - одинакого фигня....
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« Ответ #7 : 12-11-2003 09:13 » 

Цитата

Код могу копнуть и скинуть.


Копни, скинь. Мыло мое наверняка знаешь. Заранее спасибо.
Цитата

ChaoticCube, наверняка что-то делаешь неправильно - но для ответа надо локализовать проблему...
Для начала попробуй создать простенькую dll с одной функцией и прокопилить ее с тестовым проектом.
Если будет тоже самое, то тогда тект dll сюда для оценки...

Ok. Сделаю. Заранее спасибо.
Записан

Сила ночи, сила дня - одинакого фигня....
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« Ответ #8 : 12-11-2003 09:19 » 

2 вопрос снят. Хотя и странно - ошибка обнаружена. Я был не прав. Извиняюсь.
Записан

Сила ночи, сила дня - одинакого фигня....
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #9 : 12-11-2003 09:30 » 

И в чем?
Записан

А птичку нашу прошу не обижать!!!
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« Ответ #10 : 12-11-2003 09:33 » 

Ошибка такая - в конф. менеджере я выставлял Active Conf в relise. Потом шел в настройти проекта - и видел там актив конфу - debug. Ее и настраивал. В релизе у мя стоит MFC with shared library. Странно - что конфа не переключается. Ну я так думаю - привычки из Borland'а к хорошему интерфейсу...
Записан

Сила ночи, сила дня - одинакого фигня....
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #11 : 12-11-2003 09:58 » 

ChaoticCube, ну извини - когда ты настраиваешь Preferences то не увидеть слева контроль где отмечена текущая настраиваемая конфигурация - ты извини интерфейс тут не причем.

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

А птичку нашу прошу не обижать!!!
SOS
Гость
« Ответ #12 : 12-11-2003 14:43 » 

Цитата

 Для тех кто писал собственные мастера. Значит - мастер - куча окошек, которые попеременно переключаются. Очень хочется их в памяти не хранить. То есть окошко уничтожилось, следующее создалось. А если мастер и есть основное окно проекта? То есть уничтожается основное окно и происходит выход из проги. Есть ли мысли как это красиво обойти? Я обошел - так - создал невидимое основное окно, может есть более лаконичные и красивые решения?


1. Zachem delat' nevidemoe okno, kogda eto okno mozet bit' kak v Install programs - picture
2. Esli 1. ne podhodit, to v InitInstance vmesto dlg.DoModal() vizov function of class manager.

                                       CLASS MANAGER
                                /                |                        \
                              /                  |                          \
    First dialog(Screen 1)      Second dialog(Screen 2)  Therd dialog(Screen 3)

Aplicashka budet zit', a dialogi budut otcrivat'cya i zakrivat'cya


bool ClassManager::Manager()
{
   bool   retcode         = false;
   int   iDlgRetCode                   = -1;
                 
                // Initializations
   arrSI = new CPtrArray;
   if( ! arrSI )
      return false;

   m_arrPtrConnStr = new CPtrArray;
   if( ! m_arrPtrConnStr )
      return false;
   

   do
   {
      //" Screen 1"
      CDBDlgConnectionODBC dlgP0(NULL, this);   
      iDlgRetCode = dlgP0.DoModal();
      if( (iDlgRetCode == IDOK) && (eCF == CF_LOGIN) )
      {
         retcode = true;
         break;
      }
      else
        if( iDlgRetCode != IDOK )
            break;

      //"Screen 2"
      CDBDlgCreateCon dlgP1(NULL, this);
      
                   iDlgRetCode = dlgP1.DoModal();
      if(iDlgRetCode != IDOK)
           break;

      

      // if user choose Cancel
      if( iDlgRetCode != IDOK)
         break;

                                //
      // DO your other stuff
                                //
                             
      retcode = true;

   }while(0);

   return retcode;
}
Записан
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« Ответ #13 : 13-11-2003 11:26 » 

SOS - спасибо пробовал, не получалось.

iDlgRetCode = dlgP0.DoModal();  - после выполнения закрывает всю апликашку.
Записан

Сила ночи, сила дня - одинакого фигня....
SOS
Гость
« Ответ #14 : 19-11-2003 19:13 » new

Цитата

iDlgRetCode = dlgP0.DoModal(); - после выполнения закрывает всю апликашку.


Kak eto??  Я шокирован!

Esli ti zamenil vizov dialoga v InitInstance, to posle zakritiya dialoga ypravlenie peredaetcya v ty ze fynktziu chto vizvala DoModal() i delaj tam chto hochesh':
wizivaj drygoj dialog, ...

Ne raz eto delal - rabotaet  Отлично
Записан
SOS
Гость
« Ответ #15 : 19-11-2003 19:13 » 

Цитата

iDlgRetCode = dlgP0.DoModal(); - после выполнения закрывает всю апликашку.


Kak eto??  Я шокирован!

Esli ti zamenil vizov dialoga v InitInstance, to posle zakritiya dialoga ypravlenie peredaetcya v ty ze fynktziu chto vizvala DoModal() i delaj tam chto hochesh':
wizivaj drygoj dialog, ...

Ne raz eto delal - rabotaet  Отлично
Записан
SOS
Гость
« Ответ #16 : 19-11-2003 19:14 » 

Цитата

iDlgRetCode = dlgP0.DoModal(); - после выполнения закрывает всю апликашку.


Kak eto??  

Esli ti zamenil vizov dialoga v InitInstance, to posle zakritiya dialoga ypravlenie peredaetcya v ty ze fynktziu chto vizvala DoModal() i delaj tam chto hochesh':
wizivaj drygoj dialog, ...

Ne raz eto delal - rabotaet  Отлично
Записан
SOS
Гость
« Ответ #17 : 19-11-2003 19:14 » 

Цитата

iDlgRetCode = dlgP0.DoModal(); - после выполнения закрывает всю апликашку.


Kak eto??  

Esli ti zamenil vizov dialoga v InitInstance, to posle zakritiya dialoga ypravlenie peredaetcya v ty ze fynktziu chto vizvala DoModal() i delaj tam chto hochesh':
wizivaj drygoj dialog, ...

Ne raz eto delal - rabotaet  Отлично
Записан
SOS
Гость
« Ответ #18 : 19-11-2003 19:14 » 

Цитата

iDlgRetCode = dlgP0.DoModal(); - после выполнения закрывает всю апликашку.


Kak eto??  Я шокирован!

Esli ti zamenil vizov dialoga v InitInstance, to posle zakritiya dialoga ypravlenie peredaetcya v ty ze fynktziu chto vizvala DoModal() i delaj tam chto hochesh':
wizivaj drygoj dialog, ...

Ne raz eto delal - rabotaet  Отлично
Записан
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« Ответ #19 : 19-11-2003 20:27 » 

Цитата

Esli ti zamenil vizov dialoga v InitInstance, to posle zakritiya dialoga ypravlenie peredaetcya v ty ze fynktziu chto vizvala DoModal() i delaj tam chto hochesh':
wizivaj drygoj dialog, ...


Неа. Самое веселое происходит в следуещем. управление по логике должно бы туда переместиться, но первый закрытый диалог - основной. Результат - программа считает что ей дальше делать нечего. Она возвращается в InitInstance или менедждер - неважно, но уже не в состоянии открыть ни одного окна. Вот такая фенька.

Кстати в связи с этим идея появилась - может в класс App приходит мессага - мол типа усе закрываемя полностью. И ее надо перехватыватью
Записан

Сила ночи, сила дня - одинакого фигня....
SOS
Гость
« Ответ #20 : 19-11-2003 21:24 » 

1. Sorry za mnozestvennij otvet, kakojto bug na web syte, ya polychal error pri posilke.

2. posle zakritiya dialoga ypravlenie ostaetcya v funktzie menedgere, i tol'ko kogda ona zakonchena ypravlenie perehodit v InitInstance.
Povtaru eshe raz, CManager != CTttDlg (classy dialoga), eto raznie classi.

Код:
class CManager
{
  CManager();
  ~CManager();
  int f1();
  void f2();
......
}


class CTttDlg1 , public CDialog
{

........
}

class CTttDlg2 , public CDialog
{

........
}

int CManager::f1()
{

 cTttDlg1 dlg_1;
 dlg_1.DoModal();

  cTttDlg2 dlg_2;
  dlg_2.DoModal();

return IDOK;
}


BOOL CMyApp::InitInstance()
{
AfxEnableControlContainer();

// 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


////////////////////////////////////////////////////////////////
// Replace CTttDlg1 by CManager
// CTttDlg1 dlg;
// m_pMainWnd = &dlg;
// int nResponse = dlg.DoModal();

CManager dlg;
int nResponse = dlg.f1();


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;
}

i esly hochesh y menya est' primer Улыбаюсь)
« Последнее редактирование: 21-11-2007 15:39 от Алексей1153++ » Записан
SOS
Гость
« Ответ #21 : 19-11-2003 21:26 » 

Sorry
Ya imel v vidy:

class CManager
{
  CManager();
  ~CManager();
  int f1();
  void f2();
......
}


class CTttDlg1 : public CDialog
{

........
}

class CTttDlg2 : public CDialog
{

........
}

int CManager::f1()
{

 cTttDlg1 dlg_1;
 dlg_1.DoModal();

  cTttDlg2 dlg_2;
  dlg_2.DoModal();

return IDOK;
}


BOOL CMyApp::InitInstance()
{
   AfxEnableControlContainer();

   // 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


////////////////////////////////////////////////////////////////
// Replace CTttDlg1 by CManager
//   CTttDlg1 dlg;
//   m_pMainWnd = &dlg;
//   int nResponse = dlg.DoModal();

   CManager dlg;
   int nResponse = dlg.f1();


   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;
}

Moya opiska, popravilcya Ага
Записан
SOS
Гость
« Ответ #22 : 19-11-2003 21:27 » 

Sbroc' email address i ya poshlu primer
Записан
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« Ответ #23 : 20-11-2003 11:38 » 

chalex@bk.ru
Записан

Сила ночи, сила дня - одинакого фигня....
SOS
Гость
« Ответ #24 : 20-11-2003 13:57 » 

Milo poslano  Отлично

Ydachi
Записан
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« Ответ #25 : 24-11-2003 20:33 » 

Спасибо. Получил. Посмотрел. Работает. Еще раз спасибо.
Записан

Сила ночи, сила дня - одинакого фигня....
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines