Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Access Violation при OpenDialog->Execute()

4.1K
03 октября 2006 года
Zeran
80 / / 21.07.2006
Раньше все работало гуд, сейчас после того как выполняю программу (Ф9), после вызова ОпенДиалога при закрытии прога вызывает ошибку (см. скрин во вложении), как ето можно исправить?Пробовал ОпенДиалог не кидать на форму а создавать динамически - все равно ошибка есть :(
З.Ы: в обработчиках опендиалога ничего не пишу, все пусто, все равно ошибка не пропадает...
1
04 октября 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=Zeran]Раньше все работало гуд, сейчас после того как выполняю программу (Ф9), после вызова ОпенДиалога при закрытии прога вызывает ошибку (см. скрин во вложении), как ето можно исправить?Пробовал ОпенДиалог не кидать на форму а создавать динамически - все равно ошибка есть :(
З.Ы: в обработчиках опендиалога ничего не пишу, все пусто, все равно ошибка не пропадает...[/QUOTE]
Нифига не понятно. При закрытии чего? Диалога, программы? Пользуйся отладчиком - скорей всего, ты пытаешься обратится к невалидному указателю на какой нибудь объект.
4.1K
04 октября 2006 года
Zeran
80 / / 21.07.2006
Unit1.h
 
Код:
class TForm1 : public TForm
{
__published:
 //bla bla bla
private:
 //bla bla bla
public:
        TOpenDialog *OpenDialog;
};

Unit1.cpp
 
Код:
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
    OpenDialog = new TOpenDialog(NULL);
}

Unit1.cpp
 
Код:
OpenDialog->Execute();


Если во время работы программы хоть раз вызываю [COLOR="Green"]OpenDialog[/COLOR] - во время закрытия проги выскакивает такой еррор (в Б6), а если скомпиленный ЕХЕшник то 3 раза выскакивает окно:
Приложение вызвало ошибку и будет закрыто.
Интересн тот факт что [COLOR="Green"]SaveDialog[/COLOR] работает нормально, проблема только с [COLOR="Green"]OpenDialog[/COLOR]-ом
10
04 октября 2006 года
Freeman
3.2K / / 06.03.2004
[QUOTE=Zeran]
 
Код:
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
    OpenDialog = new TOpenDialog(NULL);
}
[/QUOTE]
А слабо написать:
 
Код:
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
    OpenDialog = new TOpenDialog(this);
}

Внимательно почитай в справке, что означает параметр Owner в конструкторе компонента.
4.1K
04 октября 2006 года
Zeran
80 / / 21.07.2006
Прикол в том что даже если я не руцями его создаю а просто кидаю на форму - таже ошибка!
1
04 октября 2006 года
kot_
7.3K / / 20.01.2000
дело не в диалоге скорей всего. Вот код который нормально работает.
Код:
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TBitBtn *BitBtn1;
        void __fastcall BitBtn1Click(TObject *Sender);
        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private:    // User declarations
TOpenDialog *OpenDialog;
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
OpenDialog = new TOpenDialog(NULL);
if(OpenDialog->Execute()){
ShowMessage(OpenDialog->FileName);
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
delete OpenDialog;
Action = caFree;        
}

воспроизвести твою ошибку не удалось. Размещение объявления в другой секции ничего не дало (да и не могло дать). Ошибка скорее всего в другом - гдето объект не создается но ты к нему пытаешься обратится или удалить.
1
04 октября 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=Freeman]А слабо написать:
 
Код:
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
    OpenDialog = new TOpenDialog(this);
}

Внимательно почитай в справке, что означает параметр Owner в конструкторе компонента.[/QUOTE]
Я тоже подумал о этом - но в 6 версии ошибку все равно вызвать не удалось. Все отрабатывает нормально как в релизе так и в дебаг - указатель создается, создается объект и нормально удаляется. Причина не в диалоге - или...
4.1K
04 октября 2006 года
Zeran
80 / / 21.07.2006
В другой проге ОпенДиалог пашет нормально, не знаю уже что думать...
А как можно удалить его и все что с ним связано в проекте, ато не охота создавать новый проект и переделывать все, много уж там работы :(
10
04 октября 2006 года
Freeman
3.2K / / 06.03.2004
[QUOTE=Zeran]В другой проге ОпенДиалог пашет нормально, не знаю уже что думать...[/QUOTE]
Первый признак наведенной ошибки. Где-то утечка памяти и повисшие указатели. Как говорится, ломается где-то, а попадает на OpenDialog.
1
04 октября 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=Zeran]В другой проге ОпенДиалог пашет нормально, не знаю уже что думать...
А как можно удалить его и все что с ним связано в проекте, ато не охота создавать новый проект и переделывать все, много уж там работы :([/QUOTE]
Ctrl+F. Проверь функции которые вызываются при закрытии формы.
4.1K
04 октября 2006 года
Zeran
80 / / 21.07.2006
Ох и "Ж", я просто динамически создавал АдоКоннекшн в классе Форм1, и просто в Con = new TADOConnection(NULL) а оказалось нуна this :)
Большое спасибо тем кто откликнулся, ато я б дальше ломал се голову над ОпенДиалогом :)))
1
04 октября 2006 года
kot_
7.3K / / 20.01.2000
Угу. Так как проблема решена - тема закрыта.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог