请问函数参数为HANDLE类型时,是传址吗?如果是,为什么我这样写错了?
我把所有代码放在WinMain函数里可以成功写入串口,但我把初始化串口的一段程序封装到函数里实现时,却不成功,下面是两种方式的代码:
1,直接在WinMain函数中写,成功:
#include<windows.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR pCmdLine,int iCmdShow)
{
HANDLE hComm;
DCB dcb;
COMMTIMEOUTS timeouts;
hComm=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
SetupComm(hComm,1024,1024);
timeouts.ReadIntervalTimeout=1000;
timeouts.ReadTotalTimeoutMultiplier=500;
timeouts.ReadTotalTimeoutConstant=5000;
timeouts.WriteTotalTimeoutMultiplier=500;
timeouts.WriteTotalTimeoutConstant=5000;
SetCommTimeouts(hComm,&timeouts);
GetCommState(hComm,&dcb);
dcb.BaudRate=CBR_9600;
dcb.ByteSize=8;
dcb.Parity=EVENPARITY;
dcb.StopBits=ONESTOPBIT;
SetCommState(hComm,&dcb);
char t_buffer[64]={'h','e','l','l','o','!'};
DWORD dwBytesWritten;
for(int i=0;i<64;i++)
{
WriteFile(hComm,t_buffer,1,&dwBytesWritten,NULL);
Sleep(10);
}
MessageBox(0,"File Write OK!","Comm",0);
}
2.我把初始化串口的过程放入函数,失败了:
#include <windows.h>
void OpenComm(HANDLE);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR pCmdLine,int iCmdShow)
{
HANDLE hComm=NULL;
OpenComm(hComm);
char t_buffer[6]={'h','e','l','l','o','!'};
DWORD dwBytesWritten;
for(int i=0;i<6;i++)
{
WriteFile(hComm,t_buffer+i,1,&dwBytesWritten,NULL);
Sleep(10);
}
MessageBox(0,"File Write OK!","Comm",0);
return 0;
}
void OpenComm(HANDLE hComm)
{
DCB dcb;
COMMTIMEOUTS timeouts;
hComm=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
SetupComm(hComm,1024,1024);
timeouts.ReadIntervalTimeout=1000;
timeouts.ReadTotalTimeoutMultiplier=500;
timeouts.ReadTotalTimeoutConstant=5000;
timeouts.WriteTotalTimeoutMultiplier=500;
timeouts.WriteTotalTimeoutConstant=5000;
SetCommTimeouts(hComm,&timeouts);
GetCommState(hComm,&dcb);
dcb.BaudRate=CBR_9600;
dcb.ByteSize=8;
dcb.Parity=EVENPARITY;
dcb.StopBits=ONESTOPBIT;
SetCommState(hComm,&dcb);
}

