首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这里指针为什么不能强制转换呢,请大家诊断诊断啊解决方法

2012-04-06 
这里指针为什么不能强制转换呢,请大家诊断诊断啊C/C++ code#include stdio.h#include iostream#includ

这里指针为什么不能强制转换呢,请大家诊断诊断啊

C/C++ code
#include <stdio.h>#include <iostream>#include <winsock2.h>#include <string.h>#pragma comment(lib,"wsock32.lib")using namespace std;typedef BYTE near  *PBYTE;typedef unsigned char  BYTE;#define  MAXIMUMPACKAGESIZE 512int  m_nUsed;BYTE m_Buffer[MAXIMUMPACKAGESIZE];AddData(BYTE data);AddData(UINT data);AddData(const BYTE *const pData, UINT nSize);int main(){    WORD version = MAKEWORD(1,1);    WSADATA wsaData;    SOCKET clientSock;        int err = WSAStartup(version, &wsaData);        if (err != 0)    {        cout << "load Winsock lib error!Error:"<< GetLastError()<<endl;        return -1;    }    else    {        cout << "load Winsock lib success----"<< endl;    }            clientSock = socket(AF_INET, SOCK_STREAM, 0);    SOCKADDR_IN addrSrv;    addrSrv.sin_family = AF_INET;    addrSrv.sin_addr.S_un.S_addr= inet_addr("121.248.206.142");    addrSrv.sin_port = htons(999);    memset(addrSrv.sin_zero,0,8);        if (connect(clientSock,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)) == SOCKET_ERROR)    {        cout << "build connection failded!\n";        cout << "Error:" << WSAGetLastError() << endl;        return -1;        }    char sendtxt[] = {"helloworld"};    UINT txtLength = strlen(sendtxt);    UINT Length = strlen(sendtxt);    Length +=4; // add for store strlen: int    Length++;// for TYPE    BYTE Type = 0;    AddData(Length);    AddData(Type);    AddData((PBYTE)sendtxt, txtLength);    BYTE nullTerm='\0';    AddData(nullTerm);    WSABUF m_wsabuf;    m_wsabuf.buf = reinterpret_cast<char*>(m_Buffer);    m_wsabuf.len = m_nUsed;    if(send(clientSock, const_cast<WSABUF*>(&m_wsabuf), m_nUsed, 0) == SOCKET_ERROR);    {        cout << "send faild~ ERROR: "<< GetLastError() <<endl;    }        closesocket(clientSock);    WSACleanup();}AddData(const BYTE *const pData, UINT nSize){    if ( nSize > MAXIMUMPACKAGESIZE-m_nUsed )        return FALSE;    else    {        memcpy(m_Buffer + m_nUsed, pData, nSize);        m_nUsed += nSize;        return TRUE;    }}AddData(UINT data){    return AddData(reinterpret_cast<const BYTE*>(&data), sizeof(UINT));}AddData(BYTE data){    return AddData(&data, 1);}




 error C2664: 'send' : cannot convert parameter 2 from 'struct _WSABUF *' to 'const char *'

请高手开个好药方,指点指点啊


[解决办法]
传地址时转化为long,再由long转回去就好了
[解决办法]
if( send(clientSock, (char*)(&m_wsabuf), m_nUsed, 0) == SOCKET_ERROR)
{
cout << "send faild~ ERROR: "<< GetLastError() <<endl;
}
send要求的参数是const char*类型
int send(
SOCKET s,
const char FAR *buf,
int len,
int flags
);

[解决办法]

reinterpret_cast<char*>(&m_wsabuf)

或者(char*)&m_wsabuf

热点排行