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

Вниз

Вызов API диалога настройки Com порта.   Найти похожие ветки 

 
Kolan ©   (2006-01-31 13:39) [0]

Здравствуйте,
 Хочу вызвать стандартный диалог настройки. Есть как это делать:

Как всегда не обошлось без тонкостей. Структура COMMPROP имеет перемнную длину, поэтому затруднительно сразу выделить требуемый блок памяти. Как и в случае с функцией GetCommProperties, функцию GetCommConfig придется вызывать дважды:  

  . . .
  COMMCONFIG  *cf;
  DWORD        sz;
  HANDLE       port;
 . . .
  cf=(COMMCONFIG*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(COMMCONFIG));
  cf->dwSize=sizeof(COMMCONFIG);
  GetCommConfig(port,cf,&sz);
  if(sz > sizeof(COMMCONFIG)) {
     cf=(COMMCONFIG*)HeapRealloc(GetProcessHeap(),HEAP_ZERO_MEMORY,cf,sz);
     cf->dwSize=sz;
     GetCommConfig(port,cf,&sz);
  }
  . . .
  HeapFree(GetProcessHeap(),0,cf);
  CloseHandle(port);


Проблема в том что в примере - это указатель на струкуру
COMMCONFIG *cf, а у меня эта структура является полем класса.

FCommConfig: TCommConfig;
Как быть в этом случае. Те что надо сделать
if CommConfigSize > SizeOf(АCommConfig)?


 
Rouse_ ©   (2006-01-31 14:41) [1]

либо работай через PCommConfig = ^TCommConfig; либо через array of TCommConfig;
во втором случае
SetLength и GetCommConfig(port, @cf[0], sz);


 
Rouse_ ©   (2006-01-31 14:44) [2]

Вот так примерно:

procedure TForm1.Button1Click(Sender: TObject);
var
 CommPort : string;
 hCommFile : THandle;
 Buffer : PCommConfig;
 size : DWORD;
begin
 CommPort := "COM1";
 hCommFile := CreateFile(PChar(CommPort),
   GENERIC_WRITE, 0, nil, OPEN_EXISTING,
   FILE_ATTRIBUTE_NORMAL, 0);
 if hCommFile <> INVALID_HANDLE_VALUE then
 try
   GetMem(Buffer, sizeof(TCommConfig));
   try
     size := 0;
     GetCommConfig(hCommFile, Buffer^, size);
   finally
     FreeMem(Buffer, sizeof(TCommConfig));
   end;
   GetMem(Buffer, size);
   try
     GetCommConfig(hCommFile, Buffer^, size);
     Buffer^.dcb.BaudRate := 1200;
     SetCommConfig(hCommFile, Buffer^, size);
   finally
     FreeMem(Buffer, size);
   end;
 finally
   CloseHandle(hCommFile);
 end;
end;


 
Kolan ©   (2006-01-31 15:03) [3]

OK,
Poluchilos" :)



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

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

Наверх




Память: 0.47 MB
Время: 0.028 c
2-1143564528
dubolom
2006-03-28 20:48
2006.04.16
Работа с большими числами


15-1143188080
Ламот
2006-03-24 11:14
2006.04.16
Прошу высказаться по поводу фрилансерства в целом и по поводу


2-1143297744
KING
2006-03-25 17:42
2006.04.16
Нормализация БД


6-1134060612
Паша666
2005-12-08 19:50
2006.04.16
Отправление запроса и получения онвета с сайта


15-1143031660
pavel_guzhanov
2006-03-22 15:47
2006.04.16
А что такое .net?