Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];

Вниз

переданный 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.046 c
4-1081149920
API User
2004-04-05 11:25
2004.06.20
Манифест в Windows XP


1-1086177479
None
2004-06-02 15:57
2004.06.20
Показ формцы


1-1086323999
ashnurov
2004-06-04 08:39
2004.06.20
Timer


1-1086346210
killer
2004-06-04 14:50
2004.06.20
Кнопочка в StringGrid


3-1085486333
Serge1
2004-05-25 15:58
2004.06.20
Выделение строк в <b>DBGrid</b>





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский