Вниз
Скачать: CL | DM;

Как правильно объявить и вызвать функц., доступную из всех Юнитов   Найти похожие ветки 

 
Ал   (2003-03-28 14:12) [0]

Обявляю:

{ KOL MCK } // Do not remove this line!
{$DEFINE KOL_MCK}
unit Unit1;

interface

{$IFDEF KOL_MCK}
uses Windows, Messages, ShellAPI, KOL {$IFNDEF KOL_MCK}, mirror, Classes,
Controls, mckCtrls {$ENDIF};
{$ELSE}
{$I uses.inc}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
{$ENDIF}

type
{$IFDEF KOL_MCK}
{$I MCKfakeClasses.inc}
PForm1 = ^TForm1;
TForm1 = object(TObj)
Form: PControl;
{$ELSE not_KOL_MCK}
TForm1 = class(TForm)
{$ENDIF KOL_MCK}
KOLProject1: TKOLProject;
KOLForm1: TKOLForm;
Button1: TKOLButton;
procedure Button1Click(Sender: PObj);
procedure ReadThemeFile(Sender: PObj); {<<<<<============!!!!!!!!}
procedure KOLForm1FormCreate(Sender: PObj);
private
{ Private declarations }
public
StayOnTop : Boolean;
end;

........................


Вызываю:

procedure TForm1.Button1Click(Sender: PObj);
begin
try
Form1.ReadThemeFile(Form1.Form); {<<<<<<<<==================!!!!!!!}
except
MsgOk("Не могу вызвать ReadThemeFile(Form1.Form)");
( наверное, неправильно) Обявляю:

{ KOL MCK } // Do not remove this line!
{$DEFINE KOL_MCK}
unit Unit1;

interface

{$IFDEF KOL_MCK}
uses Windows, Messages, ShellAPI, KOL {$IFNDEF KOL_MCK}, mirror, Classes,
Controls, mckCtrls {$ENDIF};
{$ELSE}
{$I uses.inc}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
{$ENDIF}

type
{$IFDEF KOL_MCK}
{$I MCKfakeClasses.inc}
PForm1 = ^TForm1;
TForm1 = object(TObj)
Form: PControl;
{$ELSE not_KOL_MCK}
TForm1 = class(TForm)
{$ENDIF KOL_MCK}
KOLProject1: TKOLProject;
KOLForm1: TKOLForm;
Button1: TKOLButton;
procedure Button1Click(Sender: PObj);
procedure ReadThemeFile(Sender: PObj); {<<<<<============!!!!!!!!}
procedure KOLForm1FormCreate(Sender: PObj);
private
{ Private declarations }
public
StayOnTop : Boolean;
end;

........................


Вызываю:

procedure TForm1.Button1Click(Sender: PObj);
begin
try
Form1.ReadThemeFile(Form1.Form); {<<<<<<<<==================!!!!!!!}
except
MsgOk("Не могу вызвать ReadThemeFile(Form1.Form)");
end;
end;

В Win95,98 при щелчке по Botton1 процедура вызывается и исполняется без вопросов!
В Win2000,XP ломается с RunTime Error 216, причем try-except не перехватывает эту ошибку!
Знатоки, подскажите, как поступить.
Процедуру объявлял так (наверное, неправильно), чтобы можно было ее вызывать из любого Юнита и там были видны Public переменные, объявленные в Unit1.

Пробовал D6+KOL, D4+KOL.


 
Bartov   (2003-03-28 16:12) [1]

> причем try-except не перехватывает эту ошибку!

http://bonanzas.rinet.ru/kol_err.zip

... и обеспечивает работу конструкций try-finally, try-except, raise с минимальными изменениями в коде.


 
Ал   (2003-03-31 14:04) [2]

Спасибо за ответ!

Kol_err я использую.

Причина оказалась в другом:
в ломающейся процедуре стоял вызов API-функции CharLower, в которую в качестве аргумента передавался PChar(строка).
Причем в Win 95, 98 строка нулевой длины обрабатывалась корректно, а в 2000, XP - с ошибкой RunTime Error = 216.

Причем try-except не ловил ее!

Заменил вызов CharLower на AnsiLowerCase из KOL - и все заработало.


 
Bartov   (2003-03-31 15:08) [3]

> Причем в Win 95, 98 строка нулевой длины обрабатывалась корректно, а в 2000, XP - с ошибкой RunTime Error = 216.

А ты сделай так и все будет отлично работать:
var
pc: PChar;
begin
...
pc := #0;
...
end;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.015 c
14-36848
oleg111
2003-11-20 13:59
2003.12.12
помогите найти TExpression


14-36847
ИМХО
2003-11-19 05:30
2003.12.12
Уэльс - Россия... ваши прогнозы, господа?


4-36886
STAINER
2003-10-16 09:37
2003.12.12
Проблемы с апишным popupmenu


4-36891
NetKnight
2003-10-10 02:22
2003.12.12
Передать хенда программы в DLL?


7-36869
Николашка
2003-10-03 11:44
2003.12.12
Interrupt 21h Function 440Dh Minor Code 4Ah




   Наверх