Линка внизу. Вот кстати мот тебе поможет... тут кусок одной моей проги - инициализация модема через CreateFile и потом инициализация этого ComDrv32 для работы если с модемом все ок.
void __fastcall TForm1::reinit(int index)
{
flags[index]|=1;
if(comms[index]->Connected())
{
sendcmd(index,postinit,0,300);
comms[index]->Disconnect();
}
//else
{
AnsiString cp="\\\\.\\COM"+(AnsiString)(index+1);
HANDLE f=CreateFile(cp.c_str(),GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(f==INVALID_HANDLE_VALUE)
{
ListView1->Items->Item[index]->Checked=false;
return;
}
CloseHandle(f);
comms[index]->Connect();
comms[index]->Disconnect();
f=CreateFile(cp.c_str(),GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
DWORD dw=0;
COMMTIMEOUTS cmto,cmt;
int er=GetCommTimeouts(f,&cmto);cmt=cmto;
cmt.WriteTotalTimeoutMultiplier=10;
cmt.WriteTotalTimeoutConstant=100;
char xxx[32];dw=0;
SetCommTimeouts(f,&cmt);
int n=0,xcon=1;
WriteFile(f,"\x0D",1,&dw,0);
Sleep(200);
ReadFile(f,xxx,32,&dw,0);
do
{
DWORD tmx=GetTickCount()+3000;
ZeroMemory(xxx,32);
WriteFile(f,"atz\x0D",4,&dw,0);
int x=0;
do
{
ReadFile(f,xxx+x,32,&dw,0);
}while((!strstr(xxx,"ERROR\x0D"))&&(!strstr(xxx,"OK\x0D"))&&(GetTickCount()<tmx));
n++;
}while((!strstr(xxx,"OK\x0D"))&&(n<2));
if(!strstr(xxx,"OK\x0D"))xcon=0;
else
{
n=0;
do
{
ZeroMemory(xxx,32);
DWORD tmx=GetTickCount()+3000;
WriteFile(f,"ate0\x0D",5,&dw,0);
do
{
ReadFile(f,xxx,32,&dw,0);
}while((!strstr(xxx,"ERROR\x0D"))&&(!strstr(xxx,"OK\x0D"))&&(GetTickCount()<tmx));
n++;
}while((!strstr(xxx,"OK\x0D"))&&(n<4));
};
SetCommTimeouts(f,&cmto);
CloseHandle(f);
if(!xcon)
{
ListView1->Items->Item[index]->Checked=false;
flags[index]&=~1;
return;
}
dtmfs[index]=rets[index]="";
rbacks[index]=0;
switch(hwhandshake)
{
case 1:comms[index]->ComPortHwHandshaking=hhRTSCTS;break;
default:comms[index]->ComPortHwHandshaking=hhNONE;
}
switch(swhandshake)
{
case 1:comms[index]->ComPortSwHandshaking=shXONXOFF;break;
default:comms[index]->ComPortSwHandshaking=shNONE;
}
switch(portspeed)
{
case 0 :comms[index]->ComPortSpeed=br110;break;
case 1 :comms[index]->ComPortSpeed=br300;break;
case 2 :comms[index]->ComPortSpeed=br1200;break;
case 3 :comms[index]->ComPortSpeed=br2400;break;
case 4 :comms[index]->ComPortSpeed=br4800;break;
case 5 :comms[index]->ComPortSpeed=br9600;break;
case 6 :comms[index]->ComPortSpeed=br14400;break;
case 7 :comms[index]->ComPortSpeed=br19200;break;
case 8 :comms[index]->ComPortSpeed=br38400;break;
case 9 :comms[index]->ComPortSpeed=br56000;break;
case 10:comms[index]->ComPortSpeed=br57600;break;
case 11:comms[index]->ComPortSpeed=br115200;break;
default:comms[index]->ComPortSpeed=br115200;
}
comms[index]->Connect();
sendcmd(index,preinit,0,100);
}
flags[index]&=~1;
}
http://www.delphi32.com/vcl/2045/
|