powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Каким образом работает алгоритм вызова из prg ???
42 сообщений из 42, показаны все 2 страниц
Каким образом работает алгоритм вызова из prg ???
    #35656991
typik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!!!!

Не могу никак понять

есть prg в нем бонально просто

for i = 1 to adir(laF, '\\SERVER\ШАРА\filezip_??????????.zip')
LsNaim=laF[i, 1]

do form rearch with LsNaim
endfor


в форме rearch - происходит разархивирование

так вот собственно проблема...
как сделать задержку, а то происходит что форма не успевает обрабатывать наименования файлов которые нужно раъархивировать...

как паузу поставить или что то в этом духе
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35656996
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
typik,

В данной постановке задачи логичнее всего посоветовать форму rearch сделать модальной. Тогда цикл не будет продолжаться до тех пор, пока форма не скроется (.Hide)
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657013
typik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не помогает ставил уже, хвтает тока первый файл и все, потом форма закрывается
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657016
typik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
такое ощущение что цикл бежит не зависимо от формы
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657031
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
typikне помогает ставил уже, хвтает тока первый файл и все, потом форма закрывается

А форма случайно не AsTopLevel?
Если ShowWindow = 2 (AsTopLevel), то модальность игнорируется.

А зачем вообще нужна форма? Вынеси распаковку в процедуру и вызывай ее.
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657048
typik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Точно
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657070
typik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот блин я использую класс например MyClass

как мне его объявить то в prg чтоб я мог с ним работать
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657079
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
typikВот блин я использую класс например MyClass

как мне его объявить то в prg чтоб я мог с ним работать

Класс где? Если в VCX то так:
Код: plaintext
1.
2.
loMyObj = NewObject('MyClass', 'MyLib.vcx')
...
loMyObj.SomeMetod()
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657084
typik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657147
typik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
блин тож не получается....

файл прилагается и класс, посмотрите пожалуйста кто может помочь, мож явная ошибка где есть

заранее благодарствую
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657244
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел. Зачем столько макроподстановок

Для полного пути лучше использовать функцию ADDBS() и кавычки поубирай:
Код: plaintext
p1=ADDBS(service_1.pcopy_out1)+LssFileNaim

Это
Код: plaintext
1.
2.
3.
	    pinfile=ALLTRIM(service_1.rabcat)+"\InFile"
...
              IF DIRECTORY(&ppinfile) 
Пишется так:
Код: plaintext
1.
2.
3.
	    pinfile=ADDBS(service_1.rabcat)+"\InFile"
...
              IF DIRECTORY(ppinfile) 

Вобщем избавляйся для начала от всех & и спрашивай конткретно: строка кода такая-то, ошибка такая-то.
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657249
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опечатка у меня в:
Код: plaintext
pinfile=ADDBS(service_1.rabcat)+"\InFile"
Надо
Код: plaintext
pinfile=ADDBS(service_1.rabcat)+"InFile"

ADDBS() пробелы в конце убирает и "\" добавляет если его нет.
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657253
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И это:
Код: plaintext
LoMyObj=NEWOBJECT('shm_zip2','c:\posting\class\shm_zip2.vcx')

можно лучше так писать
Код: plaintext
LoMyObj=NEWOBJECT('shm_zip2','shm_zip2')
Только проследить надо чтобы в SET PATH стоял путь до папки где shm_zip2.vcx лежит.
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657279
typik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Угу сейчас попробую
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657297
typik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рекомендации поправил....

В том то и дело, что ошибок не пишет т.к. их нет,
у меня в папке VfpIn скажем есть 2 архива filezip_1311081544.zip и filezip_1411081545.zip

так вот если прогнать то что я прикрепил то, почему то берется только filezip_1311081544.zip

т.е. один файл и распаковывается... а второй не приделах

если я коментирую вызов класса и вообще просто хочу посмотреть то все в порядке месседж показывает что берутся 2 файла как и должно быть

при этом понять не могу почему так...
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657313
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот причесал немного твой PRG
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
LOCAL p1,p2,p4,p5

IF !USED("service_1")
	USE service_1.dbf in  0 
ENDIF
loFSO = CREATEOBJECT('Scripting.FileSystemObject')

FOR i= 1  TO ADIR(laF,'c:\Posting\VfpIn\filezip_??????????.zip')
	LssFileNaim=laF(i, 1 )

	MESSAGEBOX(LssFileNaim)

	SELECT service_1

	p1=ADDBS(service_1.pcopy_out1)+LssFileNaim
	p2=ADDBS(service_1.path_out)
	p4=ADDBS(service_1.path_out)+"emailskarp.dbf"
	p5=ADDBS(service_1.path_out)+"emailskarp.fpt"

	pinfile=ADDBS(service_1.rabcat)+"InFile"
	poutfile=ADDBS(service_1.rabcat)+"OutFile"

	IF DIRECTORY(pinfile)
		&& Удаляем каталоги, т.к. zip чего ругается, если они есть
		loFSO.DeleteFolder(pinfile,.T.)
	ENDIF

	IF DIRECTORY(poutfile)
		loFSO1.DeleteFolder(poutfile,.T.)
	ENDIF

	IF FILE(p4)
		loFSO.DeleteFile(p4,.T.)
		loFSO.DeleteFile(p5,.T.)
	ENDIF

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
	If Empty(p2)
		return
	Endif

	LoMyObj=NEWOBJECT('shm_zip2','shm_zip2')

	LoMyObj.zipfile_name=p1
	LoMyObj.output_path=p2
	LoMyObj.output_mask="*.*"
	LoMyObj.xunzip()

	MESSAGEBOX("finish")
ENDFOR

Не запускал, но сразу возникают вопросы:
1. Ты уверен что service_1.pcopy_out1 это 'c:\Posting\VfpIn\'
2. Зачем удалять ADDBS(service_1.rabcat)+"InFile" и ADDBS(service_1.rabcat)+"OutFile" если они вроде как не используются.
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657481
typik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
За прическу спасибо огромное

Не запускал, но сразу возникают вопросы:
1. Ты уверен что service_1.pcopy_out1 это 'c:\Posting\VfpIn\'
да
2. Зачем удалять ADDBS(service_1.rabcat)+"InFile" и ADDBS(service_1.rabcat)+"OutFile" если они вроде как не используются.

не дело в том что в файле filezip_1311081500.zip там есть тоже OutFile и InFile и когда идет распаковка то вылетает сообщение вроде того что НЕ могу создать т.к. уже есть, приходится удалять....

а вот на счет того чтоб брал 2 и.т.д. архивов и распаковывал, все равно никак, берет один и все, хоть убей.... блин
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657575
typik
а вот на счет того чтоб брал 2 и.т.д. архивов и распаковывал, все равно никак, берет один и все, хоть убей.... блин
ИМХО, это происходит из-за фрагмента
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
....
FOR i= 1  TO ADIR(laF,'c:\Posting\VfpIn\filezip_??????????.zip')
....
	SELECT service_1
...
p2=ADDBS(service_1.path_out)
....
If Empty(p2)
  return
Endif
....
ENDFOR
....
А вот почему р2 становится пустым на второй (и последующих) итерации - надо спросить у разработчика.... :-)
Либо service_1.path_out пишется пустая строка, либо происходит переход на конец файла, а затем Skip...
Надо просто пройтись дебаггером и проконтролировать когда и где меняется service_1.path_out...
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657581
typik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все происходит на этой строчке и дальше в класс

LoMyObj.xunzip()
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657604
typik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в service_1.path_out это табличка, туда явно прописан путь и он нигде не меняется

загвоздка происходит при вызове LoMyObj.xunzip()

при этом в самом классе ну не нашел я ничего страшного,

а после просто все заканчивается и все , Деббагером смотрю, смотрел и не раз... и понять не могу что за ерунда
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657620
typikВсе происходит на этой строчке и дальше в класс

LoMyObj.xunzip()
Таким образом, место вознкновения ошибки нашли :-)
Надо копать дальше, что происходит в xunzip()? Каким образом там поле service_1.path_out "обнуляется"? Скорее всего, либо происходит переход в конец файла service_1, либо для какой-то записи данное поле просто незаполнено...
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657642
typik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сидел идел и решил попробовать

сделал так, все заработало, считал архивы которые лежат в папке в табличку и уже начал по скану идти по табличке

LOCAL p1,p2,p4,p5

IF !USED("service_1")
USE service_1.dbf in 0
ENDIF
loFSO = CREATEOBJECT('Scripting.FileSystemObject')

set deleted on
select filekarp
go top
scan
LssFileNaim=filekarp.naimfile

MESSAGEBOX(LssFileNaim)

SELECT service_1

p1=ADDBS(service_1.pcopy_out1)+LssFileNaim
p2=ADDBS(service_1.path_out)
p4=ADDBS(service_1.path_out)+"emailskarp.dbf"
p5=ADDBS(service_1.path_out)+"emailskarp.fpt"

pinfile=ADDBS(service_1.rabcat)+"InFile"
poutfile=ADDBS(service_1.rabcat)+"OutFile"

IF DIRECTORY(pinfile)
&& Удаляем каталоги, т.к. zip чего ругается, если они есть
loFSO.DeleteFolder(pinfile,.T.)
ENDIF

IF DIRECTORY(poutfile)
loFSO1.DeleteFolder(poutfile,.T.)
ENDIF

IF FILE(p4)
loFSO.DeleteFile(p4,.T.)
loFSO.DeleteFile(p5,.T.)
ENDIF

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
If Empty(p2)
return
Endif

LoMyObj=NEWOBJECT('shm_zip2','shm_zip2')

LoMyObj.zipfile_name=p1
LoMyObj.output_path=p2
LoMyObj.output_mask="*.*"
LoMyObj.xunzip()

MESSAGEBOX("finish")
ENDscan



к моему большому удивлению данная конструкция заработала

Если кто нибудь вдруг окинет взглядом предыдущую конструкцию, чтоб не воротить с таблицами, поделитесь опытом пожалуйста...
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657643
typikв service_1.path_out это табличка, туда явно прописан путь и он нигде не меняется

загвоздка происходит при вызове LoMyObj.xunzip()

при этом в самом классе ну не нашел я ничего страшного,

а после просто все заканчивается и все , Деббагером смотрю, смотрел и не раз... и понять не могу что за ерунда
В классе может быть, например, что-то такое:
Код: plaintext
1.
2.
3.
4.
5.
if <условие>
  select service_1
  skip
  return
endif
Если, например, мы находимся на последней записи таблицы, то этот skip приведет нас на "фиктивную" запись, которой реально в таблице нет, но которая не генерирует EOF()... Вот у нее и будет пустое поле service_1.path_out...

Кстати, такое (переход на "фиктивную" запись) я делал в ДОСе для задания пустых значений в переменных, получаемых по gather...
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657647
typik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таким образом, место вознкновения ошибки нашли :-)
Надо копать дальше, что происходит в xunzip()? Каким образом там поле service_1.path_out "обнуляется"? Скорее всего, либо происходит переход в конец файла service_1, либо для какой-то записи данное поле просто незаполнено...

чтоб не лепить целыми кусками, в начале я привел во вложении там все.... и класс тоже

service_1.path_out - тут не при чем, это табличка и в ней 3 поля всего, которые в дальнейшем никак не меняются....
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657652
typik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
service_1.path_out я его сейчас вообще убрал и просто в переменные вписал реальные пути, все тоже самое
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657669
typik
Если кто нибудь вдруг окинет взглядом предыдущую конструкцию, чтоб не воротить с таблицами, поделитесь опытом пожалуйста...

Пожалуйста:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
LOCAL p1,p2,p4,p5

IF !USED("service_1")
	USE service_1.dbf in  0 
ENDIF
loFSO = CREATEOBJECT('Scripting.FileSystemObject')

N = ADIR(laF,'c:\Posting\VfpIn\filezip_??????????.zip')

FOR i= 1  TO N
	LssFileNaim=laF(i, 1 )

<Далее по тексту процедуры>

...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657675
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
typik1. Ты уверен что service_1.pcopy_out1 это 'c:\Posting\VfpIn\'
да

Сегодня "да", завтра "нет" окажется и сглючит. Переноси путь в переменную до цикла и ее везде используй:
Код: plaintext
1.
2.
3.
4.
lcZipFolder = ADDBS(service_1.pcopy_out1)
FOR i= 1  TO ADIR(laF,lcZipFolder + 'filezip_??????????.zip')
	LssFileNaim=laF(i, 1 )
	p1=lcZipFolder+LssFileNaim

typik2. Зачем удалять ADDBS(service_1.rabcat)+"InFile" и ADDBS(service_1.rabcat)+"OutFile" если они вроде как не используются.

не дело в том что в файле filezip_1311081500.zip там есть тоже OutFile и InFile и когда идет распаковка то вылетает сообщение вроде того что НЕ могу создать т.к. уже есть, приходится удалять....

Ты приглядись к коду - тот же косяк что и в п.1. Папка куда распаковывается: p2=ADDBS(service_1. path_out )
а ты удаляешь
pinfile=ADDBS(service_1. rabcat )+"InFile"
poutfile=ADDBS(service_1. rabca t)+"OutFile"

Причем тут service_1.rabcat, даже если service_1.rabcat = service_1.path_out надо писать:
pinfile=p2+"InFile"
poutfile=p2+"OutFile"

Если структура архивов точно не известна, то лучше удалять папку p2 и заново ее создавать. Завтра еще какая подпапка появится и все работать перестанет.

typikа вот на счет того чтоб брал 2 и.т.д. архивов и распаковывал, все равно никак, берет один и все, хоть убей.... блин

Чего написал, то и делает. После распаковки кто копировать в другое место будет? Сейчас у тебя так происходит: Папка почистилась, первый архив распаковался, папка почистилась, второй архив распаковался... В в итоге остался последний распакованный.
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657691
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
typikсделал так, все заработало, считал архивы которые лежат в папке в табличку и уже начал по скану идти по табличке

Вероятно где-то в подпрограммах использована переменная i Ее значение где-то внутри поменялось и цикл FOR прекратился.

Всегда объявляй локальные переменные в LOCAL, иначе подобные глюки ловить потом очень проблематично.

Попробуй:
Код: plaintext
1.
local i
FOR i= 1  TO ...
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657693
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
typikа вот на счет того чтоб брал 2 и.т.д. архивов и распаковывал, все равно никак, берет один и все, хоть убей.... блин
Вы используете для распаковки строннюю DLL. Она хоть и DLL, но вполне может саму распаковку выполнять асинхронно с Вызывающей программой. Например, в другом потоке. Вы же не знаете как она устроена.

Я упаковываю/распаковываю Rar’ом.
Создаю для Rar отдельный процесс.
Дожидаюсь его окончания.
Продолжаю свою программу.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
lnRarHandle=fCreateProcess('"'+gcStartPath+'WinRAR.exe" e "'+tcFileName+'" "'+THIS.c_dr_temp_path+'"')


DO WHILE .T.
  IF WaitForSingleObject(lnRarHandle,  0 )=0x00000102
*Процесс не закончен
    DOEVENTS
  ELSE
*Процесс закончен
    EXIT
  ENDIF
ENDDO

 = CloseHandle(lnRarHandle)
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657718
typik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сейчас буду все сначала делать с учетом ваших рекомендаций.....
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657746
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
typikсейчас буду все сначала делать с учетом ваших рекомендаций.....
Еще функции декларировать нужно.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
*Декларация функций для отслеживания внешних программ
  DECLARE INTEGER CreateProcess IN kernel32.DLL ;
    INTEGER lpApplicationName, ;
    STRING lpCommandLine, ;
    INTEGER lpProcessAttributes, ;
    INTEGER lpThreadAttributes, ;
    INTEGER bInheritHandles, ;
    INTEGER dwCreationFlags, ;
    INTEGER lpEnvironment, ;
    INTEGER lpCurrentDirectory, ;
    STRING @lpStartupInfo, ;
    STRING @lpProcessInformation

  DECLARE INTEGER WaitForSingleObject IN kernel32.DLL ;
    INTEGER hHandle, INTEGER dwMilliseconds

  DECLARE INTEGER CloseHandle IN kernel32.DLL ;
    INTEGER hObject
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657769
maskas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fox_viktypikсейчас буду все сначала делать с учетом ваших рекомендаций.....
Еще функции декларировать нужно.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
*Декларация функций для отслеживания внешних программ
  DECLARE INTEGER CreateProcess IN kernel32.DLL ;
    INTEGER lpApplicationName, ;
    STRING lpCommandLine, ;
    INTEGER lpProcessAttributes, ;
    INTEGER lpThreadAttributes, ;
    INTEGER bInheritHandles, ;
    INTEGER dwCreationFlags, ;
    INTEGER lpEnvironment, ;
    INTEGER lpCurrentDirectory, ;
    STRING @lpStartupInfo, ;
    STRING @lpProcessInformation

  DECLARE INTEGER WaitForSingleObject IN kernel32.DLL ;
    INTEGER hHandle, INTEGER dwMilliseconds

  DECLARE INTEGER CloseHandle IN kernel32.DLL ;
    INTEGER hObject




оооо решил попробовать

DECLARE INTEGER CreateProcess IN kernel32.DLL ;
INTEGER lpApplicationName, ;
STRING lpCommandLine, ;
INTEGER lpProcessAttributes, ;
INTEGER lpThreadAttributes, ;
INTEGER bInheritHandles, ;
INTEGER dwCreationFlags, ;
INTEGER lpEnvironment, ;
INTEGER lpCurrentDirectory, ;
STRING @lpStartupInfo, ;
STRING @lpProcessInformation

DECLARE INTEGER WaitForSingleObject IN kernel32.DLL ;
INTEGER hHandle, INTEGER dwMilliseconds

DECLARE INTEGER CloseHandle IN kernel32.DLL ;
INTEGER hObject

lnRarHandle=fCreateProcess('"'+gcStartPath+'WinRAR.exe" e "'+tcFileName+'" "'+THIS.c_dr_temp_path+'"')


DO WHILE .T.
IF WaitForSingleObject(lnRarHandle, 0)=0x00000102
*Процесс не закончен
DOEVENTS
ELSE
*Процесс закончен
EXIT
ENDIF
ENDDO

= CloseHandle(lnRarHandle)


gcStartPath - Откуда берем
WinRAR.exe - полный путь до exe
tcFileName - что берем т.е. какой архив
THIS.c_dr_temp_path - аа это куда ложим

??????
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657826
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maskas
gcStartPath - Откуда берем
WinRAR.exe - полный путь до exe
tcFileName - что берем т.е. какой архив
THIS.c_dr_temp_path - аа это куда ложим

??????
"'+gcStartPath+'WinRAR.exe" – полный путь к Rar’у.
Я для упаковки в одной программе и распаковке в другой использую одну и ту же версию Rar.
Чтобы не зависеть от версии, которая может быть установлена на компьютере пользователя, кладу в стартовую папку программы файл WinRar.exe и использую его.

tcFileName - что берем т.е. какой архив – полный путь распаковываемого файла.

THIS.c_dr_temp_path - аа это куда ложим – да.

Но это специфика моей программы.
Можно манипулировать ключами Rar’а, в зависимости от своих потребностей.
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657832
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fox_vik"'+gcStartPath+'WinRAR.exe"
gcStartPath+WinRAR.exe

Скопировал больше, чен нужно. :)
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35657931
maskas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если писать так

gcStartPath="c:\Test\"
tcFileName="c:\Test\Out\test.rar"
c_dr_temp_path="c:\"

lnRarHandle=CreateProcess('"'+gcStartPath+'WinRAR.exe" e "'+tcFileName+'" "'+c_dr_temp_path+'"')

Пишет что много аргументов и усе блин, где касяк
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35658011
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maskasесли писать так

gcStartPath="c:\Test\"
tcFileName="c:\Test\Out\test.rar"
c_dr_temp_path="c:\"

lnRarHandle=CreateProcess('"'+gcStartPath+'WinRAR.exe" e "'+tcFileName+'" "'+c_dr_temp_path+'"')

Пишет что много аргументов и усе блин, где касяк
Приношу свои извининения, обманул я Вас. :(
Там еще мои функции есть.
Сейчас работающий пример в один prg соберу и выложу.
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35658023
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maskas,

Тут я исходник класса-обертки над CreateProcess() давал.

В простейшем случае использовать так:
Код: plaintext
1.
2.
3.
loWEx = NewObject('waitexec')
if loWEx.Execute('rar ...') && Запускаем архиватор
   loWEx.WaitStop() && Дожидаемся завершения работы
endif
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35658067
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
*Äåêëàðàöèÿ ôóíêöèé äëÿ îòñëåæèâàíèÿ âíåøíèõ ïðîãðàìì
DECLARE INTEGER CreateProcess IN kernel32.DLL ;
  INTEGER lpApplicationName, ;
  STRING lpCommandLine, ;
  INTEGER lpProcessAttributes, ;
  INTEGER lpThreadAttributes, ;
  INTEGER bInheritHandles, ;
  INTEGER dwCreationFlags, ;
  INTEGER lpEnvironment, ;
  INTEGER lpCurrentDirectory, ;
  STRING @lpStartupInfo, ;
  STRING @lpProcessInformation

DECLARE INTEGER WaitForSingleObject IN kernel32.DLL ;
  INTEGER hHandle, INTEGER dwMilliseconds

DECLARE INTEGER CloseHandle IN kernel32.DLL ;
  INTEGER hObject

lnRarHandle=fCreateProcess('WinRAR.exe e E:\1\015_invert.rar E:\2\')

DO WHILE .T.
  IF WaitForSingleObject(lnRarHandle,  0 )=0x00000102
*Ïðîöåññ íå çàêîí÷åí
    DOEVENTS
  ELSE
*Ïðîöåññ çàêîí÷åí
    EXIT
  ENDIF
ENDDO

= CloseHandle(lnRarHandle)

****************************************************************************************************************************
****************************************************************************************************************************
****************************************************************************************************************************
*** Çàïóñê âíåøíåé ïðîãðàììû è îæèäàíèå åå îêîí÷àíèÿ.
*http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com: 80 /support/kb/articles/Q191/ 5 / 84 .asp&NoWebContent= 1 
*http://msdn2.microsoft.com/en-us/library/ms687032.aspx

PROCEDURE fCreateProcess
  PARAMETERS tcProgramString

  LOCAL lcStart,lcProcessInfo,lcFile2Run,lnRetCode,lnHProcess
*Çàïóñê ïðîãðàììû
  #DEFINE NORMAL_PRIORITY_CLASS  32 
  lcStart = fCreateProcess_long2str( 68 ) + REPLICATE(CHR( 0 ),  64 )
  lcProcessInfo = REPLICATE(CHR( 0 ),  16 )

  lcFile2Run = tcProgramString + CHR( 0 )

  lnRetCode = CreateProcess( 0 , lcFile2Run,  0 ,  0 ,  1 , ;
    NORMAL_PRIORITY_CLASS,  0 ,  0 , @lcStart, @lcProcessInfo)
  IF lnRetCode =  0 
    RETURN .F.
  ENDIF
  lnHProcess = fCreateProcess_str2long(SUBSTR(lcProcessInfo,  1 ,  4 ))

  RETURN lnHProcess

********************
FUNCTION fCreateProcess_long2str
********************
  PARAMETERS m.longval

  PRIVATE i, m.retstr

  m.retstr = ""
  FOR i =  24  TO  0  STEP - 8 
    m.retstr = CHR(INT(m.longval/( 2 ^i))) + m.retstr
    m.longval = MOD(m.longval, ( 2 ^i))
  NEXT
  RETURN m.retstr

*******************
FUNCTION fCreateProcess_str2long
*******************

  PARAMETERS m.longstr

  PRIVATE i, m.retval

  m.retval =  0 
  FOR i =  0  TO  24  STEP  8 
    m.retval = m.retval + (ASC(m.longstr) * ( 2 ^i))
    m.longstr = RIGHT(m.longstr, LEN(m.longstr) -  1 )
  NEXT
  RETURN m.retval
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35658071
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз приношу извинения.
Давно писал. :(
Этот пример проверил. Работает.
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35658112
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только пути желательно в двойных кавычках.
Код: plaintext
lnRarHandle=fCreateProcess('"E:\3\WinRAR.exe" e "E:\1\015_invert.rar" "E:\2\"')
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35661117
typik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!!!!

Ребята я нашел касяк где он у меня был,

а именно я объвлял и вызывал класс
LoMyObj=NEWOBJECT('shm_zip2','shm_zip2')

LoMyObj.zipfile_name=p1
LoMyObj.output_path=p2
LoMyObj.output_mask="*.*"
LoMyObj.xunzip()

Но но но , при этом у него есть

LoMyObj.init() - где происходит обновления Api функций, так вот

если поставить вот так вот
LoMyObj=NEWOBJECT('shm_zip2','shm_zip2')
LoMyObj.init()
LoMyObj.zipfile_name=p1
LoMyObj.output_path=p2
LoMyObj.output_mask="*.*"
LoMyObj.xunzip()
LoMyObj.Destroy()


то все замечательно просто работает



fox_vik - Огромное спасибо, только вот



DO WHILE .T.
IF WaitForSingleObject(lnRarHandle, 0)=0x00000102
*Процесс не закончен
DOEVENTS
ELSE
*Процесс закончен
EXIT
ENDIF
ENDDO

= CloseHandle(lnRarHandle)

Если проверить

*Процесс не закончен
*Процесс закончен

то в любом случае вываливает сразу
*Процесс не закончен
*Процесс закончен


т.е. закончен ли процесс отследить нет возможности


Всем спасибо
...
Рейтинг: 0 / 0
Каким образом работает алгоритм вызова из prg ???
    #35661721
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
typik
Если проверить

*Процесс не закончен
*Процесс закончен

то в любом случае вываливает сразу
*Процесс не закончен
*Процесс закончен


т.е. закончен ли процесс отследить нет возможности


Честно говоря, ничего не понял.
Т.е. Вы хотите сказать, что и в If и в else одновременно попадает? :)
Если я правильно Вас понял.

Запустите на распаковку большой файл, который долго ждать. Посмотрите.
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Каким образом работает алгоритм вызова из prg ???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]