我用svchost启用DLL服务,在servicemain主函数中通过创建线程的方式建立一个功能线程mainfn()
在mainfn()中用了switch..case,但通过调试来看,程序无法执行switch里面的语句!
相关说明如下:欢迎各位大侠指点:
DWORD WINAPI MainFn(LPVOID lpParam)
{
```套接字初始化
connect(sockClient, (SOCKADDR*)&addrClient, sizeof(SOCKADDR));
//定义一个结构体,进行传递文件时要用的。
fileinfo fileinfo1;
fileinfo1.len=0;
fileinfo1.seek=0;
fileinfo1.type=0;
strcpy(fileinfo1.name,"ufile.liz");

//标识,确保完成一次通话
bool FLAG=true;
char sendBuffer[sizeof(fileinfo)];
char recvBuffer[sizeof(fileinfo)];
memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
//发送命令
int aa=sendn(sockClient,sendBuffer,sizeof(fileinfo));
if(aa<0)
{
closesocket(sockClient);
return -1;
} //****从服务端接收情况看,DLL服务程序已经成功运行到此!        /********************测试一********************************
        //将case里面的代码放在此外,从服务器接收情况是可以成功接收并再次发送的。
//aa=readn(sockClient,recvBuffer,sizeof(fileinfo));
//memcpy(&fileinfo1,recvBuffer,sizeof(fileinfo));
        //fileinfo1.type=1;
// memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
// s=sendn(sockClient,sendBuffer,sizeof(fileinfo));
//**************************************************************** while(FLAG)
{
aa=readn(sockClient,recvBuffer,sizeof(fileinfo));
if(aa<0)
{
closesocket(sockClient);
return -1;
}        /********************测试二********************************
        //将case里面的代码放在此外,从服务器接收情况也是可以成功接收并再次发送的。
//aa=readn(sockClient,recvBuffer,sizeof(fileinfo));
//memcpy(&fileinfo1,recvBuffer,sizeof(fileinfo));
        //fileinfo1.type=1;
// memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
// s=sendn(sockClient,sendBuffer,sizeof(fileinfo));
//**************************************************************** switch(fileinfo1.type)
{
        //********************测试三************************************
        //放在此处,不执行
                       // fileinfo1.type=1;
//memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
//s=sendn(sockClient,sendBuffer,sizeof(fileinfo));
case 0:

fileinfo1.type=1;
if(!myFile.Open(fileinfo1.name, CFile::modeRead | CFile::typeBinary | CFile::shareDenyNone ))
{return -1;} trslen=myFile.GetLength();
myFile.Close();
fileinfo1.len=trslen;
      //******************************************************************
      //这是真正要用的地方,照样不执行,根本就不行switch语句!
memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
s=sendn(sockClient,sendBuffer,sizeof(fileinfo));
if(s<0)
{
closesocket(sockClient);
return -1;
}
          break;
case 1:
putfile(sockClient,fileinfo1.name,fileinfo1.len,fileinfo1.seek);
break;
case 9:
FLAG=false;
break;
case 2:
fileinfo1.type=2;
if(!myFile.Open(fileinfo1.name, CFile::modeRead | CFile::typeBinary | CFile::shareDenyNone ))
{return -1;}
trslen=myFile.GetLength();
myFile.Close();
if((strncmp(fileinfo1.name,cmpname,100)==0)||(trslen==fileinfo1.len))
{
memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
s=sendn(sockClient,sendBuffer,sizeof(fileinfo));
if(s<0)
{ closesocket(sockClient);
return -1;
}
}
break;
default:
FLAG=false; }
}
closesocket(sockClient);
WSACleanup();
return 0;
}

解决方案 »

  1.   

    程序无法执行switch里面的语句!
    那你看看在
    default:
    FLAG=false;
    填加一条输出语句~~~
    看到底执行没有??
      

  2.   

    switch 不能在dll 中 执行不能把 我一般都能执行你设置端点 查看一下 , socket 好像 没有暂停阿
      

  3.   

    我把switch的条件用
    int num;
    num=1;
    switch(num)都没有用!
    我也比较奇怪!
      

  4.   

    switch只执行case里面的语句switch(condition)
    {
    //放在此处的代码不会执行
    ...
    case ...
    //case后面的语句才会执行
    ...
    }