Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизПерехват значения Найти похожие ветки
← →
Tanuki (2004-04-05 12:22) [0]Существует ли возможность перехватить значение получаемое в результате выполнения внешнего приложения и передать его в Delphi.
Конкретно ситуация следующая: запускаю из delphi программу для подсчета контрольной суммы (КС) файла (fsum.exe), мне необходимо вернуть полученное значение КС в программу delphi.
← →
Digitman © (2004-04-05 12:29) [1]
> значение получаемое в результате выполнения внешнего приложения
что есть "значение получаемое в результате выполнения внешнего приложения" ?
> передать его в Delphi
зачем оно среде Делфи нужно ?
> полученное значение
кем полученное ? кто его запрашивал ? как выглядит это "полученное значение" ? цифирки что ли на экране ?
← →
Tanuki (2004-04-05 12:32) [2]После выполнении fsum выводит на экран значение контрольной суммы (набор цифир и букв), мне необходимо это значение вернуть в программы из которой я запускал fsum.
← →
Семен Сорокин © (2004-04-05 12:38) [3]Tanuki (05.04.04 12:32) [2]
SendMessage + обработка
← →
Digitman © (2004-04-05 12:42) [4]fsum - твое приложение или чужое ? консольное или GUI ?
← →
Tanuki (2004-04-05 12:59) [5]Извиняюсь за тупой вопрос, но как конкретно произвести данную операцию?
Я пишу буквально следующее:procedure TfmMain.Button1Click(Sender: TObject);
var
myh : HWND;
begin
ShellExecute(myh,
Pchar(""),Pchar("c:\1\fsum.exe"),
Pchar("-md5 -jm -dc:\1 1.csv"),
Pchar(""),SW_SHOWDEFAULT);
end;
Что мне делать дальше?
← →
Tanuki (2004-04-05 13:00) [6]fsum - консольное досовское приложение.
← →
Digitman © (2004-04-05 13:03) [7]
> консольное досовское приложение
еще раз - консольное Win32-приложение или ДОС-задача ?
← →
Hooch © (2004-04-05 13:04) [8]не проще КС самому в проге посчитать ? :-)
← →
Tanuki (2004-04-05 13:07) [9]консольное Win32-приложение
← →
Tanuki (2004-04-05 13:08) [10]не проще КС самому в проге посчитать ? :-)
← →
Tanuki (2004-04-05 13:10) [11]сорри, сообщение выше это глюк :)
> не проще КС самому в проге посчитать ? :-)
fsum может КС считать используя различные алгоритмы (md5? src32 и т.д.) А я их принципа не знаю, а задача уже поставлена начальством.
← →
Digitman © (2004-04-05 13:24) [12]type
TCRC32 = Longword;
PCRC32 = ^TCRC32;
TCRC32Table = array[0..255] of TCRC32;
PCRC32Table = ^TCRC32Table;
const
CRC32Poly = $EDB88320;
CRC32InitMask = $FFFFFFFF;
var
CRC32Table: PCRC32Table;
...
procedure MakeCRC32Table(CRC32Table: PCRC32Table; const InitCRC: TCRC32);
var
i,j: Integer;
r: TCRC32;
begin
for i:= Low(TCRC32Table) to High(TCRC32Table) do begin
r:= i;
for j:= 8 downto 1 do
if (r and 1) = 1 then
r:= (r shr 1) xor InitCRC
else
r:= r shr 1;
CRC32Table[i]:= r;
end;
end;
function GetCRC32(const Buffer; BufSize: DWord; InitCRC: TCRC32; const Inv: Boolean): TCRC32;
var
BufPtr: PByte;
begin
BufPtr:= PByte(Buffer);
while BufSize > 0 do begin
InitCRC:= CRC32Table[LoByte(InitCRC) xor BufPtr^] xor (InitCRC shr 8);
Inc(BufPtr);
Dec(BufSize);
end;
Result:= InitCRC;
if Inv then
Result:= not Result;
end;
...
var
fs: TFileStream;
Buffer: Pointer;
CRC: TCRC32;
BytesRead: Integer;
..
GetMem(Buffer, 65536);
CRC := CRC32InitMask;
while True do
begin
BytesRead := fs.ReadBuffer(Buffer^, 65536);
if BytesRead = 0 then Break;
CRC32 := GetCRC32(Buffer^, BytesRead, CRC32, False);
end;
initialization
New(CRC32Table);
MakeCRC32Table(CRC32Table, CRC32Poly);
finalization
Dispose(CRC32Table);
← →
han_malign © (2004-04-05 13:26) [13]Ну как вариант перенаправление вывода в файл (Pchar("-md5 -jm -dc:\1 1.csv > result.txt")), с анализом файла.
md5 - помоему, в CryptoAPI, в виндах есть(только это хеш, а не контрольная сумма), crc - на http://delphibase.endimus.com/ полно примеров...
← →
Tanuki (2004-04-05 14:14) [14]
> Ну как вариант перенаправление вывода в файл (Pchar("-md5
> -jm -dc:\1 1.csv > result.txt")), с анализом файла.
Весь прикол в том, что файл с КС не создается. Что за глю я не пойму. Если из обычной командной строки запускать, то все работает, а при запуске из программы файл не создается.
← →
Anatoly Podgoretsky © (2004-04-05 14:18) [15]Переправить стандартный вывод на свою программу, но от ShellExecute придется отказаться, примеры ищи в местном FAQ
← →
Tanuki © (2004-04-05 14:41) [16]
> примеры ищи в местном FAQ
Весь FAQ перелапатил по WinIp ничего подобного не нашел. Нельзя ли меня носом ткнуть в пример?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.042 c