ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Delphi: communication
  #1  
Старый 28.06.2007, 20:14
4e4en
Новичок
Регистрация: 25.06.2007
Сообщений: 5
Провел на форуме:
20234

Репутация: 11
По умолчанию Delphi: communication

I have 2 questions about communication

1) I have 2 applications ( one as proccess, 2-nd as injected dll somewhere)

How can they communicate?

2) I have to transmit data throught web and parse result.
I am using this function do that, but when it is used, application freezes for some time. how can do that, without freezing application

Код:
function GetInetPageSRC(const fileURL: String): string;
const
  BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array[1..BufferSize] of char;
  BufferLen: DWORD;
  sAppName: string;
begin
 Result := '';
 sAppName := ExtractFileName(Application.ExeName) ;
 hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0) ;
 try
  hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0) ;
  try

   repeat
    InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
    Result := Result + Copy(string(Buffer),1,BufferLen);

   until (BufferLen = 0) OR (length(string(Buffer)) = 0);

  finally
   InternetCloseHandle(hURL)
  end
 finally
  InternetCloseHandle(hSession)
 end

end;
P.S> You can answer in russian
 
Ответить с цитированием

  #2  
Старый 28.06.2007, 21:29
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Цитата:
1) I have 2 applications ( one as proccess, 2-nd as injected dll somewhere)

How can they communicate?
Да как угодно. Pipes; mapped files; да хоть Read/WriteProcessMemory..

Цитата:
how can do that, without freezing application
Делай все свои грязные дела в отдельном потоке, а главный пусть дальше обрабатывает сообщения.
То есть в обработчике кнопки надо написать CreateThread, а в потоке делать все остальное.
 
Ответить с цитированием

  #3  
Старый 28.06.2007, 21:40
4e4en
Новичок
Регистрация: 25.06.2007
Сообщений: 5
Провел на форуме:
20234

Репутация: 11
По умолчанию

I foggot say, that i am an idiot

can you give small examples, because i am learning delphi only week
 
Ответить с цитированием

  #4  
Старый 28.06.2007, 22:18
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме:
1892597

Репутация: 836


Отправить сообщение для W!z@rD с помощью ICQ
По умолчанию

Only week???!!!!
It's really your code???
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
 
Ответить с цитированием

  #5  
Старый 29.06.2007, 14:23
4e4en
Новичок
Регистрация: 25.06.2007
Сообщений: 5
Провел на форуме:
20234

Репутация: 11
По умолчанию

Only some parts
 
Ответить с цитированием

  #6  
Старый 29.06.2007, 16:23
Kpeamop
Новичок
Регистрация: 04.01.2007
Сообщений: 24
Провел на форуме:
100525

Репутация: 46
Отправить сообщение для Kpeamop с помощью ICQ
По умолчанию

Цитата:
Делай все свои грязные дела в отдельном потоке, а главный пусть дальше обрабатывает сообщения.
То есть в обработчике кнопки надо написать CreateThread, а в потоке делать все остальное.
это будет примерно так:
Цитата:
procedure Thr;
begin
// твои грязные дела

ExitThread(0); // самостоятельное завершение потока
end;

var hThr: dword;
begin
CreateThread(nil,0,@Thr,nil,0,hThr); // создание потока Thr

// ... выполнение главного потока дальше

// TerminateThread(hThr,0); // принудительное завершение потока Thr
end;
 
Ответить с цитированием

  #7  
Старый 29.06.2007, 16:34
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Можно обойтись и без ExitThread, который за тебя заботливо сделает kernel32!BaseThreadStart

PS. Я с дельфи не оч дружу, но мб CreateThread(nil,0,@Thr,nil,0,hThr); здесь нужно @hThr, чтобы адрес переменной передать?
 
Ответить с цитированием

  #8  
Старый 29.06.2007, 17:43
Kpeamop
Новичок
Регистрация: 04.01.2007
Сообщений: 24
Провел на форуме:
100525

Репутация: 46
Отправить сообщение для Kpeamop с помощью ICQ
По умолчанию

Цитата:
PS. Я с дельфи не оч дружу, но мб CreateThread(nil,0,@Thr,nil,0,hThr); здесь нужно @hThr, чтобы адрес переменной передать?
нет не нужно...
в windows.pas:
Цитата:
function CreateThread(lpThreadAttributes: Pointer;
dwStackSize: DWORD; lpStartAddress: TFNThreadStartRoutine;
lpParameter: Pointer; dwCreationFlags: DWORD; var lpThreadId: DWORD): THandle;
"var lpThreadId: DWORD" => var означает что нужно передавать не адрес, т.к. компилятор сам заменит переменную на адрес, если было бы так "lpThreadId: Pointer", или вон посмотри при передачи параметра lpParameter: Pointer, тогда да адрес @hThr...
 
Ответить с цитированием

  #9  
Старый 29.06.2007, 17:55
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Последний параметр CreateThread по смыслу - адрес переменной, куда положить нужно ид потока. Ты уверен что оно само заменит hThr на адрес hThr ?

UPD: Там стоит var, не заметил. Значит, всетаки передастся адрес.

Последний раз редактировалось _Great_; 29.06.2007 в 18:13..
 
Ответить с цитированием

  #10  
Старый 29.06.2007, 18:10
Xserg
Участник форума
Регистрация: 09.12.2006
Сообщений: 135
Провел на форуме:
426226

Репутация: 726
По умолчанию

Ну а я про общение процессов пример приведу.
Правда не понял на каком языке общаться.

I prefer named mapped virtual memory

Код:
 const
  sizebufo=$100000;
  C_ReadFile=5;
type
  my_virt_mem=record
              command:dword;
              sizeblock:dword;
              bufo:array [0..sizebufo] of byte;
                           end;
var
  fmo,host:dword;
  virtbuf:^my_virt_mem;
begin
// process headline (within each process)
host:=0;
fmo:=OpenFileMapping(FILE_MAP_WRITE or FILE_MAP_READ,true,'my_original_name');
if fmo=0 then begin// first run
fmo:=CreateFileMapping($ffffffff,0,SEC_COMMIT or PAGE_READWRITE,0,sizebufo,'my_original_name');
host:=1;      end;
virtbuf:=MapViewOfFile(fmo,SECTION_MAP_READ or SECTION_MAP_WRITE,0,0,0);
if virtbuf=nil then exit;
//-----------------------

if host=1 then begin // host process
virtbuf^.command:=C_ReadFile;
while virtbuf^.command<>0 do sleep(100);
               end;

if host=0 then begin // slave process
while virtbuf^.command=0 do sleep(100);
case virtbuf^.command of
C_ReadFile: begin
//I have no component InternetReadFileFromUrlAdnSaveToBuffer
//InternetReadFile(hURL,@virtbuf^.bufo,sizebufo,virtbuf^.sizeblock);
virtbuf^.command:=0;
             end;
end; // case
               end;
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Small Delphi begin_end С/С++, C#, Delphi, .NET, Asm 10 11.11.2008 10:40
Borland выпускает Delphi для PHP. fYt Мировые новости 19 17.06.2008 21:17
Book Delphi Rayne С/С++, C#, Delphi, .NET, Asm 5 08.04.2007 22:06



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ