Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.20;
Скачать: CL | DM;

Вниз

переданный exe-ку параметр   Найти похожие ветки 

 
tamroF   (2004-06-04 02:30) [0]

в отдельном юните:

function Prove(ParamCt:integer;ParamS:string):boolean;
begin
Result:=False;
if ParamCt > 0 then
if ParamS="111" then
 Result:=True;
end;


эта функция проверяет переданный параметр exe-ку (он один)..

а это - в dpr:

begin
if not Prove(ParamCount,ParamStr(1)) then Exit;
 Application.Initialize;
Application.CreateForm(TForm1, Form1); // пусть так..
 Application.Run;
end.


при запуске без параметра - все ок. (не запускается)
при передачи какого либо параметра exe-ку возникает runtime error..

так вот вопрос: правильно ли принят параметр?!
или в чем тут дело?


 
Palladin ©   (2004-06-04 02:38) [1]

да черт его знает в чем тут дело, но явно не в параметре...


 
piople ©   (2004-06-04 06:17) [2]

На обработчик OnCreate:

begin
if ParamCount < 1 then Halt(1)
else //Здусь делай все что надо!!!!
end;


 
V-A-V   (2004-06-04 06:26) [3]

Ошибка видимо где-то в Form1. Попробуй прошерстить отладчиком по F8 пошагово, думаю, что найдешь где собака зарыта...


 
piople ©   (2004-06-04 06:29) [4]


> tamroF  

А может вместо Exit попробовать Halt(1)???


 
piople ©   (2004-06-04 06:34) [5]

Все нормально работает!!!!

program Project1;

uses
 Forms,
 Unit1 in "Unit1.pas" {Form1};

{$R *.res}

function Prove(ParamCt:integer;ParamS:string):boolean;
begin
Result:=False;
if ParamCt > 0 then
if ParamS="111" then
Result:=True;
end;

begin
if not Prove(ParamCount,ParamStr(1)) then Exit;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
 Application.Run;
end.


 
V-A-V   (2004-06-04 06:36) [6]

Можно пробовать, что угодно и даже Application.Terminate, но если в Application.CreateForm(TForm1, Form1); возникает ошибка, то рыть надо в Form1


 
piople ©   (2004-06-04 06:39) [7]


> V-A-V  

Повторяю

program Project1;

uses
Forms,
Unit1 in "Unit1.pas" {Form1};

{$R *.res}

function Prove(ParamCt:integer;ParamS:string):boolean;
begin
Result:=False;
if ParamCt > 0 then
if ParamS="111" then
Result:=True;
end;

begin
if not Prove(ParamCount,ParamStr(1)) then Exit;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.


РАБОТАЕТ НОРМАЛЬНО!!!!!


 
V-A-V   (2004-06-04 06:44) [8]

А у tamroF нормально работает, у него может в Form1 столько кода наворочено, что и не снилось, в голом виде оно конечно будет работать...


 
piople ©   (2004-06-04 06:47) [9]


> А у tamroF нормально работает, у него может в Form1 столько
> кода наворочено, что и не снилось


И откуда же это те упало???


 
V-A-V   (2004-06-04 06:52) [10]

> И откуда же это те упало???

А ты, что весь код автора сабжа видел???


 
piople ©   (2004-06-04 07:07) [11]


> V-A-V  

А ты что ли видел?


 
tamroF   (2004-06-04 10:33) [12]

>> V-A-V   (04.06.04 06:36) [6]
>> Можно пробовать, что угодно и даже Application.Terminate, но если в >> Application.CreateForm(TForm1, Form1); возникает ошибка, то рыть надо в Form1

Да, ошибка вылазит на креэйте..

>> piople ©   (04.06.04 06:39) [7]
>> Повторяю
>> РАБОТАЕТ НОРМАЛЬНО!!!!!

) это радует, но я ж не просто так сабж завел...

>> V-A-V   (04.06.04 06:44) [8]
>> А у tamroF нормально работает, у него может в Form1 столько кода наворочено,
>> что и не снилось, в голом виде оно конечно будет работать...

Это правда.. действительно, оч. много..
К большому проекту (крупнокалиберному курсовику) решил в конце создать маленькую отдельную программку, кот. создает на рабочем столе ярлык на нее... с параметром..
(чтоб "повысить" уровень зашиты доступа)
все сделал и оттестил на пустом проекте, принимая этот параметр..
работает...
в курсач внедрил и вот те на.. как будто на пустом месте... сыпет..

так вот halt(1) (вместо Exit) нормально завершает работу программы, когда параметр приходит неверный (не 111)
ну то есть, когда и попадает на halt...

а вот еси параметр верный (как в примере - 111), halt обходит и тот же runtime error...

ну а вообще, почему обычный внешний параметр может давать такой эффект?!


 
Anatoly Podgoretsky ©   (2004-06-04 10:47) [13]

Ты смотрел справку по Exit? Область применимости. Я бы не рискнул использовать это в дпр файле.


 
tamroF   (2004-06-04 10:59) [14]

Да, и сыпет она на первом же обращении dll:

const
 fDLL = "fDLL.dll";

...
var
 CreateSocket: procedure;  stdcall;
 lib : THandle;
 ...
begin
//-------------------------------------------           CreateSocket
lib := LoadLibrary(fDLL);
CreateSocket := GetProcAddress(lib, "CreateSocket");
if @CreateSocket <> nil then
 CreateSocket else                // тута
  ShowMessage("Error load socket...");
FreeLibrary(lib);
...


 
tamroF   (2004-06-04 11:01) [15]

>> смотрел справку по Exit? Область применимости.
Нет.
еще...
А использую только от нежелания писать "начало-конец"

>> Я бы не рискнул использовать это в дпр файле.
но ведь уже от этого избавился...


 
han_malign ©   (2004-06-04 11:03) [16]

>ну а вообще, почему обычный внешний параметр может давать такой эффект?!
- он не дает никакого эффекта, у тебя код проекта протух(есть у него такое свойство), в проекте и ищи...

З.Ы. Если проверку параметра убрать - проект работает?

>Ты смотрел справку по Exit? Область применимости. Я бы не рискнул использовать это в дпр файле.
- все нормально с Exit, обычное ветвление, у него проблема в другом...
только что проверил:
if(...)then exit;
  ..............
  test EAX,EAX
  jz +... - на Halt0


 
han_malign ©   (2004-06-04 11:07) [17]

> if @CreateSocket <> nil then
- ну проверил ты, что адрес переменной не nil, и что...
if(Assigned(CreateSocket))then


 
tamroF   (2004-06-04 11:46) [18]

>> Если проверку параметра убрать - проект работает?

Проект просто так работает (без проверки параметров и без их передачи)
но если передавать параметр (не важно какой), а в проге его не проверять (или проверять, но все равно грузить), то лезет тот же runtime error..

>> ну проверил ты, что адрес переменной не nil, и что...
>> if(Assigned(CreateSocket))then

А это тут вообще не причем...
dll есть. функция есть. И она assigned.

проект рабочий.
НО передача ему любого параметра вызывает runtime, когда проект запускается..

вот проблема.


 
Anatoly Podgoretsky ©   (2004-06-04 11:52) [19]

han_malign ©   (04.06.04 11:03) [16]
Я не говорю, что не работает, но я предпочитаю писать так, чтобы даже возможности ошибки не было.
И конечно я уверен, что дело не в этом, а тех кусках кода которые он не привел.



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

Текущий архив: 2004.06.20;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.021 c
1-1086334553
Yad
2004-06-04 11:35
2004.06.20
Code Explorer


1-1086258035
nitro
2004-06-03 14:20
2004.06.20
Сохранение в файл jpg все что находится в Groupbox ?


4-1084546402
SPeller
2004-05-14 18:53
2004.06.20
Избитый вопрос про память. Как узнать?


1-1086257109
Сашка
2004-06-03 14:05
2004.06.20
Перехват сообщений из dll


1-1086644326
kat
2004-06-08 01:38
2004.06.20
Опережающее событие OnClick