Главная страница
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.051 c
2-1144092699
Kapris
2006-04-03 23:31
2006.04.16
как нарисовать полуокруг ?


15-1143032261
Физик
2006-03-22 15:57
2006.04.16
На етом форуме можна зделать штобы ответы приходили на mail


15-1143286159
DillerXX
2006-03-25 14:29
2006.04.16
Можете ли вы читать текст


1-1142101426
Kolan
2006-03-11 21:23
2006.04.16
Как задать нижний предел для Series Area у TChart .


15-1143322644
McSimm
2006-03-26 00:37
2006.04.16
Статья Мерлина "Создание полноценного чата на Flash"