Текущий архив: 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.45 MB
Время: 0.043 c