Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка завершения приложения 
:(
    Опции темы
former
  Дата 6.1.2007, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



Прежде всего, поздравляю всех с наступившим Новым годом и приближающимся рождеством.

А теперь суть проблемы.

Есть библиотека в которой хранится форма с 13-ю фрэймами на которых размещены различные контролы (RadioButton, Label, Edit...). В процессе работы  с этой формой осуществляется переход по фреймам (что-то вроде Wizard-а). В результате формируется строка, которую необходимо передать при закрытии формы в приложение из которого она была вызвана. Я использовал стандартный метод. Однако, необходимо использовать стиль оформления XP. Помещая компонент (Delphi  7) или присоединяя манифест (что в принципе одно и тоже) после завершения работы с программой появляется следующее сообщение: ..\Project1.exe raised too many consecutive exeptions.... Если число фрэймов не более двух, то всё работает нормально. Пробовал с панелями, но не помогло.

ЧТО ДЕЛАТЬ??? smile 

Код формы в DLL:
Код

unit uClassForm;

interface

uses Windows, StdCtrls, ComCtrls, Controls, ExtCtrls, Classes, Forms;

type
  TClassForm = class(TForm)
  BRestBtn: TButton;
    BBackBtn: TButton;
    BNextBtn: TButton;
    BExitBtn: TButton;
    Panel0: TPanel;
    Label01: TLabel;
    Label02: TLabel;
    RadioButton01: TRadioButton;
    RadioButton02: TRadioButton;
    Bevel1: TBevel;
    PanelA1: TPanel;
    LabelA11: TLabel;
    LabelA12: TLabel;
    Bevel2: TBevel;
    RadioButtonA11: TRadioButton;
    RadioButtonA12: TRadioButton;
    PanelA2: TPanel;
    LabelA21: TLabel;
    LabelA22: TLabel;
    Bevel3: TBevel;
    RadioButtonA21: TRadioButton;
    RadioButtonA22: TRadioButton;
    GroupBoxA2: TGroupBox;
    RadioButtonA23: TRadioButton;
    RadioButtonA24: TRadioButton;
    PanelG1: TPanel;
    LabelG11: TLabel;
    LabelG12: TLabel;
    Bevel4: TBevel;
    RadioButtonG11: TRadioButton;
    RadioButtonG12: TRadioButton;
    RadioButtonG13: TRadioButton;
    PanelG2: TPanel;
    LabelG21: TLabel;
    LabelG22: TLabel;
    Bevel5: TBevel;
    RadioButtonG21: TRadioButton;
    RadioButtonG22: TRadioButton;
    RadioButtonG23: TRadioButton;
    PanelG3: TPanel;
    LabelG31: TLabel;
    LabelG32: TLabel;
    Bevel6: TBevel;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  ClassForm: TClassForm;
  ClssID:ShortString;
  CurrentFrm:integer; 

procedure CreateClassForm(AppHandle: THandle); stdcall;
function GetLabelText:ShortString; stdcall;
procedure DestroyClassForm; stdcall;

implementation

{$R *.dfm}

//---Экспортируемые процедуры и функции-----------------------------------------

procedure CreateClassForm(AppHandle: THandle);
begin
  Application.Handle:=AppHandle;
  ClassForm:=TClassForm.Create(Application);
  ClassForm.ShowModal;
end;

function GetLabelText:ShortString;
begin
 // Result:=ClssID;
end;

procedure DestroyClassForm;
begin
  ClassForm.Free;
end;

//---Внутренние процедуры и функции---------------------------------------------

procedure TClassForm.FormCreate(Sender: TObject);
begin
  Panel01.BringToFront;
end;

procedure TClassForm.BNextBtnClick(Sender: TObject);
var i:integer;
begin 
   //переходы но фрэймам
  ClssID:=LabelR3.Caption;
  Close;
end;

end;


Код DLL:
Код

library classdef;

uses
  ShareMem,
  SysUtils,
  Classes,
  uClassForm in 'uClassForm.pas' {ClassForm};

{$R *.res}

exports
  CreateClassForm,
  GetLabelText,
  DestroyClassForm;

begin
end. 


Код приложения:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, XPMan;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Bevel1: TBevel;
    Label1: TLabel;
    Label2: TLabel;
    XPManifest1: TXPManifest;
    procedure Button1Click(Sender: TObject);
    function DecodeClassID1(ClassificationID:string):string;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure CreateClassForm(AppHandle: THandle); stdcall; external 'classdef.dll';
function GetLabelText:ShortString; stdcall; external 'classdef.dll';
procedure DestroyClassForm; stdcall; external 'classdef.dll';

procedure TForm1.Button1Click(Sender: TObject);
var IDRT:string;
begin
  CreateClassForm(Application.Handle);
  IDRT:=GetLabelText;
  DestroyClassForm;
  Label2.Caption:=IDRT;
end;

end;




--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
W4FhLF
Дата 6.1.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 6
Всего: 121



Может попробовать освободить эти фреймы? Что-то вроде метода Free.


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
former
Дата 6.1.2007, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



W4FhLF, происходит тоже самое. Так что дело не в этом.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Sunvas
Дата 6.1.2007, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(former @  6.1.2007,  17:54 Найти цитируемый пост)
..\Project1.exe raised too many consecutive exeptions....

Када-то у меня была такая проблема. Единственное, кривое решение, которое я нашел - это при закрытии килять свой процесс.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
MetalFan
Дата 6.1.2007, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



1) не использовать фреймы
2) не использовать формы в dll


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
bems
Дата 7.1.2007, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



дай больше кода


--------------------
Обижено школьников: 8
PM MAIL   Вверх
former
Дата 7.1.2007, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



А в Delphi 2006 всё работает как часы! smile 

Sunvas, как это делается?

MetalFan, количество сообщений набиваешь что ли?

bems, я привёл код с использованием панелей. А кода здесь вполне достаточно. Ведь, как я понял, ошибка в загрузке/выгрузке или в самой дельфе (скорее всего). Ведь в 2006-й работает же.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Sunvas
Дата 7.1.2007, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(former @  7.1.2007,  01:40 Найти цитируемый пост)
А в Delphi 2006 всё работает как часы! 

Жди глюков.

Добавлено @ 01:46 
Цитата(former @  7.1.2007,  01:40 Найти цитируемый пост)
Sunvas, как это делается?

Код

terminateprocess(OpenProcess(PROCESS_TERMINATE, BOOL(0),getcurrentprocessid),0);



--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
former
Дата 7.1.2007, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



Sunvas, а куда эту строку нужно добавить?


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Sunvas
Дата 7.1.2007, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Ну как куда? Нужно добавить в событие, когда ты завершаешь работу программы. 
Если ты ее завершает крестиком в правом верхнем углу, то эту строчку нужно прописать в Onclose(query)


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
former
Дата 7.1.2007, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



Sunvas, большое тебе человеческое СПАСИБО. Всё работает отлично. Не раз уже помогал, и в очередной раз ставлю плюс.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Sunvas
Дата 7.1.2007, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Заходите еще. smile 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
bems
Дата 7.1.2007, 06:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Не могу предложить ничего на замену, но это все равно не метод. 
Надо искать причину.


--------------------
Обижено школьников: 8
PM MAIL   Вверх
VectorMan
Дата 7.1.2007, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antihero
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 9.4.2006

Репутация: нет
Всего: 4



Цитата(Sunvas @ 7.1.2007,  03:45)
Код

terminateprocess(OpenProcess(PROCESS_TERMINATE, BOOL(0),getcurrentprocessid),0);

Не буду спорить насчёт целесообразности такого подхода, но всё же стоит сказать, что для завершения собственного процесса можно просто вызвать ExitProcess  smile 
PM   Вверх
Rennigth
Дата 7.1.2007, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Ребят, не хочу говорить ничего плохого, но ошыбку лечить терминейтом... smile. Надо лезть в VCL или манифест или что там еще есть и искать ошибку а не так...  


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0736 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.