Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.028 c
3-1140417228
Os
2006-02-20 09:33
2006.04.16
Удаление дублирующих записей


15-1143024152
data
2006-03-22 13:42
2006.04.16
делимся впечатлениями от прочитанных книг :)


2-1143632624
apic
2006-03-29 15:43
2006.04.16
Уважаемые мастера, ПАМАГИТЕ!!!!!!!!!!!!!


3-1140726959
Falcon(TFsoft)
2006-02-23 23:35
2006.04.16
Проблема с конектом к MySQL


1-1142417495
КиТаЯц
2006-03-15 13:11
2006.04.16
OpenOffice вместо MSExcel




   Наверх