我写的UDP接受控件
int CDTSockCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
InitSocket();
RECVDATA * pRecvData=new RECVDATA;                       
         pRecvData->sock=m_socket;
pRecvData->hwnd=m_hWnd; HANDLE handle=CreateThread(NULL,0,RecvPro,pRecvData,0,0); CloseHandle(handle);
return 0;
}然后我也定义了一个函数(是写在类里面,但是不是类函数)
DWORD WINAPI RecvPro(LPVOID lpParameter) 
{
    SOCKET sock=((RECVDATA*)lpParameter)->sock;
HWND hwnd=((RECVDATA*)lpParameter)->hwnd;
SOCKADDR_IN addrFrom;
int len=sizeof(SOCKADDR);
         ...  ...
         ...  ...
         ::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)Recvpf);

    return 0;

但是运行时候出错:
E:DTSockCtl.cpp(242) : error C2065: 'RecvPro' : undeclared identifier
E:DTSockCtl.cpp(288) : error C2373: 'RecvPro' : redefinition; different type modifiers我想问问大家我该怎么改呢?

解决方案 »

  1.   

    但是运行时候出错: 
    E:DTSockCtl.cpp(242) : error C2065: 'RecvPro' : undeclared identifier 
    E:DTSockCtl.cpp(288) : error C2373: 'RecvPro' : redefinition; different type modifiers 
    ==这叫编译时出错,不是运行时出错。
      

  2.   

    代码就这些?RecvPro在哪个文件中定义的?是否在其它函数中又有定义?
      

  3.   

    是编译时出错,代码我只是抽了一部分,这两个函数都是在...Ctrl类里面定义的!其他函数里或是类里都没有定义
      

  4.   

    RecvPro 定义的问题  你在你工程里面搜一下 看看都那些地方定义了RecvPro  
    error C2065: 'RecvPro' : undeclared identifier 可能是你定义的一个RecvPro 但其作用域不在CDTSockCtrl::OnCreate中 error C2373: 'RecvPro' : redefinition; different type modifiers 重复定义  你检查下你得code 都那些地方定义了 RecvPro。如果RecvPro定义在某个头文件中的全局变量,而你包含了那个头文件后又定义了一个RecvPro,虽然可能数据类型不一样 但是在使用时仍然会报错
      

  5.   

    搜索 'RecvPro'...
    E:\DTSOCKET\DTSock\DTSockCtl.cpp(242): HANDLE handle=CreateThread(NULL,0,RecvPro,pRecvData,0,0);
    E:\DTSOCKET\DTSock\DTSockCtl.cpp(287):DWORD WINAPI RecvPro(LPVOID lpParameter) 
    已找到 2 个符合的.我搜索了一下,就找到这两个,也就是我刚才发的那两个!,那怎样才能让它 的作用域在CDTSockCtrl::OnCreate中呢?谢谢了!
      

  6.   

    编译过程是这样的:把工程的每一个.cpp文件中所include的头文件和cpp文件展开到一个文件中,然后生成对应的.obj文件,如果展开后发现有重复定义的变量(比如你这里的RecvPro)那么就会报错  你查下你都在那定义了RecvPro 就能找到问题所在。
    如果是全局变量  如果能的话 尽量定义在.cpp中  而不要定义在头文件中 那样最容易引起重复包含
      

  7.   

    DWORD WINAPI RecvPro(LPVOID lpParameter) 放到 HANDLE handle=CreateThread(NULL,0,RecvPro,pRecvData,0,0); 前边声明一下
      

  8.   

    这是我整个的CDTSockCtrl类的代码,冗长的我就删掉了。但是函数没有删除,麻烦大家帮我看看,谢谢
    // DTSockCtl.cpp : Implementation of the CDTSockCtrl ActiveX Control class.#include "stdafx.h"
    #include "DTSock.h"
    #include "DTSockCtl.h"
    #include "DTSockPpg.h"
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    #define LINES 1024IMPLEMENT_DYNCREATE(CDTSockCtrl, COleControl)
    /////////////////////////////////////////////////////////////////////////////
    // Message mapBEGIN_MESSAGE_MAP(CDTSockCtrl, COleControl)
    //{{AFX_MSG_MAP(CDTSockCtrl)
    ON_WM_CREATE()
    //}}AFX_MSG_MAP
    ON_OLEVERB(AFX_IDS_VERB_EDIT, OnEdit)
    ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
    ON_MESSAGE(WM_RECVDATA,OnRecvData)
    END_MESSAGE_MAP()
    /////////////////////////////////////////////////////////////////////////////
    // Dispatch mapBEGIN_DISPATCH_MAP(CDTSockCtrl, COleControl)
    //{{AFX_DISPATCH_MAP(CDTSockCtrl)
    //}}AFX_DISPATCH_MAP
    DISP_FUNCTION_ID(CDTSockCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
    END_DISPATCH_MAP()
    /////////////////////////////////////////////////////////////////////////////
    // Event mapBEGIN_EVENT_MAP(CDTSockCtrl, COleControl)
    //{{AFX_EVENT_MAP(CDTSockCtrl)
    EVENT_CUSTOM("RecvEv", FireRecvEv, VTS_PI4)
    //}}AFX_EVENT_MAP
    END_EVENT_MAP()
    /////////////////////////////////////////////////////////////////////////////
    // Property pagesBEGIN_PROPPAGEIDS(CDTSockCtrl, 1)
    PROPPAGEID(CDTSockPropPage::guid)
    END_PROPPAGEIDS(CDTSockCtrl)
    /////////////////////////////////////////////////////////////////////////////
    // Initialize class factory and guidIMPLEMENT_OLECREATE_EX(CDTSockCtrl, "DTSOCK.DTSockCtrl.1",
    0x9a5b7d08, 0x6f2a, 0x4910, 0x8c, 0x68, 0xc5, 0x9a, 0xa1, 0x36, 0xb1, 0xbc)
    /////////////////////////////////////////////////////////////////////////////
    // Type library ID and versionIMPLEMENT_OLETYPELIB(CDTSockCtrl, _tlid, _wVerMajor, _wVerMinor)
    /////////////////////////////////////////////////////////////////////////////
    // Interface IDsconst IID BASED_CODE IID_DDTSock =
    { 0x5eccc0ef, 0xbec9, 0x41f0, { 0x89, 0xf0, 0xd1, 0x4f, 0xa2, 0x81, 0xb3, 0x47 } };
    const IID BASED_CODE IID_DDTSockEvents =
    { 0x37a8158a, 0x3135, 0x464a, { 0xb3, 0x89, 0xdf, 0x49, 0xdc, 0xd6, 0xb6, 0x98 } };
    /////////////////////////////////////////////////////////////////////////////
    // Control type informationstatic const DWORD BASED_CODE _dwDTSockOleMisc =
    OLEMISC_ACTIVATEWHENVISIBLE |
    OLEMISC_SETCLIENTSITEFIRST |
    OLEMISC_INSIDEOUT |
    OLEMISC_CANTLINKINSIDE |
    OLEMISC_RECOMPOSEONRESIZE;IMPLEMENT_OLECTLTYPE(CDTSockCtrl, IDS_DTSOCK, _dwDTSockOleMisc)
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::CDTSockCtrlFactory::UpdateRegistry -
    // Adds or removes system registry entries for CDTSockCtrl
    BOOL CDTSockCtrl::CDTSockCtrlFactory::UpdateRegistry(BOOL bRegister)
    {
    // TODO: Verify that your control follows apartment-model threading rules.
    // Refer to MFC TechNote 64 for more information.
    // If your control does not conform to the apartment-model rules, then
    // you must modify the code below, changing the 6th parameter from
    // afxRegInsertable | afxRegApartmentThreading to afxRegInsertable. if (bRegister)
    return AfxOleRegisterControlClass(
    AfxGetInstanceHandle(),
    m_clsid,
    m_lpszProgID,
    IDS_DTSOCK,
    IDB_DTSOCK,
    afxRegInsertable | afxRegApartmentThreading,
    _dwDTSockOleMisc,
    _tlid,
    _wVerMajor,
    _wVerMinor);
    else
    return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
    }
    /////////////////////////////////////////////////////////////////////////////
    // Licensing stringsstatic const TCHAR BASED_CODE _szLicFileName[] = _T("DTSock.lic");static const WCHAR BASED_CODE _szLicString[] =
    L"Copyright (c) 2009 微软中国";
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::CDTSockCtrlFactory::VerifyUserLicense -
    // Checks for existence of a user licenseBOOL CDTSockCtrl::CDTSockCtrlFactory::VerifyUserLicense()
    {
    return AfxVerifyLicFile(AfxGetInstanceHandle(), _szLicFileName,
    _szLicString);
    }
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::CDTSockCtrlFactory::GetLicenseKey -
    // Returns a runtime licensing keyBOOL CDTSockCtrl::CDTSockCtrlFactory::GetLicenseKey(DWORD dwReserved,
    BSTR FAR* pbstrKey)
    {
    if (pbstrKey == NULL)
    return FALSE; *pbstrKey = SysAllocString(_szLicString);
    return (*pbstrKey != NULL);
    }
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::CDTSockCtrl - ConstructorCDTSockCtrl::CDTSockCtrl()
    {
    InitializeIIDs(&IID_DDTSock, &IID_DDTSockEvents);
    numperb=64;//初始情况每个板传64个能量值高能32低能32
    bperbag=27;//初始情况是16块板的探测器,每个包传9块板
    nofbag=0;//当前是第一个包
    maxnofbag=1;//每一行数据包含几个包

    m_Recvpf=(WORD*)GlobalAlloc(0,numperb*bperbag*(maxnofbag+1)*LINES*2*2);
    m_Recvpl=(WORD*)GlobalAlloc(0,numperb*bperbag*(maxnofbag+1)*2);
    m_offset=(int*)GlobalAlloc(0,numperb*bperbag*(maxnofbag+1)*4);
    m_gain=(float*)GlobalAlloc(0,numperb*bperbag*(maxnofbag+1)*4);}
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::~CDTSockCtrl - DestructorCDTSockCtrl::~CDTSockCtrl()
    {
    }
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::OnDraw - Drawing functionvoid CDTSockCtrl::OnDraw(
    CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
    {
    pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
    pdc->Ellipse(rcBounds);
    }
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::DoPropExchange - Persistence supportvoid CDTSockCtrl::DoPropExchange(CPropExchange* pPX)
    {
    ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    COleControl::DoPropExchange(pPX);}
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::OnResetState - Reset control to default statevoid CDTSockCtrl::OnResetState()
    {
    COleControl::OnResetState();  // Resets defaults found in DoPropExchange
    }
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::AboutBox - Display an "About" box to the uservoid CDTSockCtrl::AboutBox()
    {
    CDialog dlgAbout(IDD_ABOUTBOX_DTSOCK);
    dlgAbout.DoModal();
    }
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl message handlersint CDTSockCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    if (COleControl::OnCreate(lpCreateStruct) == -1)
    return -1;
    //在窗口刚启动时调用初始化函数进行套接字初始化
    InitSocket();
    RECVDATA * pRecvData=new RECVDATA;                       
        pRecvData->sock=m_socket;
    pRecvData->hwnd=m_hWnd;
    //在堆区创建SOCKET类型指针并初始化,将作为线程参数传人线程函数
        //创建一个线程
    HANDLE handle=CreateThread(NULL,0,RecvPro,pRecvData,0,0);
    CloseHandle(handle);
    return 0;
    }
    BOOL CDTSockCtrl::InitSocket()
    {
    ////定义套接字
    m_socket=socket(AF_INET,SOCK_DGRAM,0);

    ////创建IP地址信息
    SOCKADDR_IN addrSock;
        addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
    addrSock.sin_family=AF_INET;
        addrSock.sin_port=htons(1234);
    addrSock.sin_addr.s_addr=inet_addr("192.168.1.1");
    ////套接字绑定
    int retval;
    retval=bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));
    if(SOCKET_ERROR==retval)
    {
    closesocket(m_socket);
    // MessageBox("套接字绑定失败!");
    return FALSE;
    }

    return TRUE;
    }
    void CDTSockCtrl::OnRecvData(WPARAM wParam,LPARAM lParam)
    {

    FireRecvEv((long*)Recvpf);
    // MessageBox(tempBuf);
    }
    BYTE rightrot(BYTE a, int n)
    {
    int rb;
    while(n-->0)
    {
    rb=(a & 1)<<(8-1);
    a=a>>1;
    a=a|rb;
    }
    return (a);
    }DWORD WINAPI RecvPro(LPVOID lpParameter) 
    {
        SOCKET sock=((RECVDATA*)lpParameter)->sock;
    HWND hwnd=((RECVDATA*)lpParameter)->hwnd;
    .......................................................
    ::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)Recvpf);
        return 0;
    }
      

  9.   

    RecvPro 是全局函数  他的作用域从他定义的地方开始到文件最后结束  RecvPro 在  CreateThread 后边   当然不在作用于里面了   或者你把DWORD WINAPI RecvPro(LPVOID lpParameter) 拿到文件的最前边  一般全局函数都放在前边
      

  10.   

    这是我的头文件
    #if !defined(AFX_DTSOCKCTL_H__A5C38BD4_EF9D_4CC4_B4C1_5561656FA060__INCLUDED_)
    #define AFX_DTSOCKCTL_H__A5C38BD4_EF9D_4CC4_B4C1_5561656FA060__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    #include "winsock2.h"
    // DTSockCtl.h : Declaration of the CDTSockCtrl ActiveX Control class./////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl : See DTSockCtl.cpp for implementation.#define WM_RECVDATA  WM_USER+1
    struct RECVDATA
    {
    SOCKET sock;
        HWND hwnd;
    };
    class CDTSockCtrl : public COleControl
    {
    DECLARE_DYNCREATE(CDTSockCtrl)// Constructor
    public:
    CDTSockCtrl();// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CDTSockCtrl)
    public:
    virtual void OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid);
    virtual void DoPropExchange(CPropExchange* pPX);
    virtual void OnResetState();
    //}}AFX_VIRTUAL// Implementation
    protected:
    ~CDTSockCtrl(); BEGIN_OLEFACTORY(CDTSockCtrl)        // Class factory and guid
    virtual BOOL VerifyUserLicense();
    virtual BOOL GetLicenseKey(DWORD, BSTR FAR*);
    END_OLEFACTORY(CDTSockCtrl) DECLARE_OLETYPELIB(CDTSockCtrl)      // GetTypeInfo
    DECLARE_PROPPAGEIDS(CDTSockCtrl)     // Property page IDs
    DECLARE_OLECTLTYPE(CDTSockCtrl) // Type name and misc status// Message maps
    //{{AFX_MSG(CDTSockCtrl)
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    //}}AFX_MSG
    afx_msg void OnRecvData(WPARAM wParam,LPARAM lParam);
    DECLARE_MESSAGE_MAP()// Dispatch maps
    //{{AFX_DISPATCH(CDTSockCtrl)
    //}}AFX_DISPATCH
    DECLARE_DISPATCH_MAP() afx_msg void AboutBox();// Event maps
    //{{AFX_EVENT(CDTSockCtrl)
    void FireRecvEv(long FAR* recvpf)
    {FireEvent(eventidRecvEv,EVENT_PARAM(VTS_PI4), recvpf);}
    //}}AFX_EVENT
    DECLARE_EVENT_MAP()// Dispatch and event IDs
    public:
    BOOL InitSocket();
    SOCKET  m_socket;
    int m_numperb;//每块板包含多少个能量值
    int m_bperbag;//每个包传送多少块板
    int m_nofbag;//当前是第几个包的数据
    int m_maxnofbag;//每一行一共多少个数据包
    BOOL m_Lab;//检测标识,为真检测,为假不检测
    BYTE m_TRANSPORT;//每个包的数据传输方式
    BYTE m_EXCHANGE;//表示相邻两个像素的位置是否需要调换
    BYTE m_CORE;//表示探测器是双能还是单能
    BYTE    m_pllun[2];

    WORD *m_Recvpl,*m_Recvpf;
    BOOL m_nor;
    int *m_offset;
        float   *m_gain;
    enum {
    //{{AFX_DISP_ID(CDTSockCtrl)
    eventidRecvEv = 1L,
    //}}AFX_DISP_ID
    };
    };
    int numperb;//每块板包含多少个能量值
    int bperbag;//每个包传送多少块板
    int nofbag;//当前是第几个包的数据
    int maxnofbag;//每一行一共多少个数据包
    BOOL Lab;//检测标识,为真检测,为假不检测
    BYTE TRANSPORT;//每个包的数据传输方式
    BYTE EXCHANGE;//表示相邻两个像素的位置是否需要调换
    BYTE CORE;//表示探测器是双能还是单能
    BYTE pllun[2];WORD *Recvpl,*Recvpf;
    BOOL nor;
    int *offset;
    float *gain;
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_DTSOCKCTL_H__A5C38BD4_EF9D_4CC4_B4C1_5561656FA060__INCLUDED)
      

  11.   

    DWORD WINAPI RecvPro(LPVOID lpParameter) 拿到文件的最前边 
      

  12.   

    我把函数放到了最前面
    又报错:好像是涉及到Socket操作的都错了
    DTSockCtl.obj : error LNK2001: unresolved external symbol __imp__recvfrom@24
    DTSockCtl.obj : error LNK2001: unresolved external symbol __imp__closesocket@4
    DTSockCtl.obj : error LNK2001: unresolved external symbol __imp__bind@12
    DTSockCtl.obj : error LNK2001: unresolved external symbol __imp__inet_addr@4
    DTSockCtl.obj : error LNK2001: unresolved external symbol __imp__htons@4
    DTSockCtl.obj : error LNK2001: unresolved external symbol __imp__htonl@4
    DTSockCtl.obj : error LNK2001: unresolved external symbol __imp__socket@12
    Debug/DTSock.ocx : fatal error LNK1120: 7 unresolved externals
    执行 link.exe 时出错.
      

  13.   

    这是现在的顺序// DTSockCtl.cpp : Implementation of the CDTSockCtrl ActiveX Control class.#include "stdafx.h"
    #include "DTSock.h"
    #include "DTSockCtl.h"
    #include "DTSockPpg.h"
    #include "winsock2.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    #define LINES 1024IMPLEMENT_DYNCREATE(CDTSockCtrl, COleControl)
    /////////////////////////////////////////////////////////////////////////////
    // Message mapBEGIN_MESSAGE_MAP(CDTSockCtrl, COleControl)
    //{{AFX_MSG_MAP(CDTSockCtrl)
    ON_WM_CREATE()
    //}}AFX_MSG_MAP
    ON_OLEVERB(AFX_IDS_VERB_EDIT, OnEdit)
    ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
    ON_MESSAGE(WM_RECVDATA,OnRecvData)
    END_MESSAGE_MAP()
    /////////////////////////////////////////////////////////////////////////////
    // Dispatch mapBEGIN_DISPATCH_MAP(CDTSockCtrl, COleControl)
    //{{AFX_DISPATCH_MAP(CDTSockCtrl)
    //}}AFX_DISPATCH_MAP
    DISP_FUNCTION_ID(CDTSockCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
    END_DISPATCH_MAP()
    /////////////////////////////////////////////////////////////////////////////
    // Event mapBEGIN_EVENT_MAP(CDTSockCtrl, COleControl)
    //{{AFX_EVENT_MAP(CDTSockCtrl)
    EVENT_CUSTOM("RecvEv", FireRecvEv, VTS_PI4)
    //}}AFX_EVENT_MAP
    END_EVENT_MAP()
    /////////////////////////////////////////////////////////////////////////////
    // Property pagesBEGIN_PROPPAGEIDS(CDTSockCtrl, 1)
    PROPPAGEID(CDTSockPropPage::guid)
    END_PROPPAGEIDS(CDTSockCtrl)
    /////////////////////////////////////////////////////////////////////////////
    // Initialize class factory and guidIMPLEMENT_OLECREATE_EX(CDTSockCtrl, "DTSOCK.DTSockCtrl.1",
    0x9a5b7d08, 0x6f2a, 0x4910, 0x8c, 0x68, 0xc5, 0x9a, 0xa1, 0x36, 0xb1, 0xbc)
    /////////////////////////////////////////////////////////////////////////////
    // Type library ID and versionIMPLEMENT_OLETYPELIB(CDTSockCtrl, _tlid, _wVerMajor, _wVerMinor)
    /////////////////////////////////////////////////////////////////////////////
    // Interface IDsconst IID BASED_CODE IID_DDTSock =
    { 0x5eccc0ef, 0xbec9, 0x41f0, { 0x89, 0xf0, 0xd1, 0x4f, 0xa2, 0x81, 0xb3, 0x47 } };
    const IID BASED_CODE IID_DDTSockEvents =
    { 0x37a8158a, 0x3135, 0x464a, { 0xb3, 0x89, 0xdf, 0x49, 0xdc, 0xd6, 0xb6, 0x98 } };
    /////////////////////////////////////////////////////////////////////////////
    // Control type informationstatic const DWORD BASED_CODE _dwDTSockOleMisc =
    OLEMISC_ACTIVATEWHENVISIBLE |
    OLEMISC_SETCLIENTSITEFIRST |
    OLEMISC_INSIDEOUT |
    OLEMISC_CANTLINKINSIDE |
    OLEMISC_RECOMPOSEONRESIZE;IMPLEMENT_OLECTLTYPE(CDTSockCtrl, IDS_DTSOCK, _dwDTSockOleMisc)
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::CDTSockCtrlFactory::UpdateRegistry -
    // Adds or removes system registry entries for CDTSockCtrl
    BOOL CDTSockCtrl::CDTSockCtrlFactory::UpdateRegistry(BOOL bRegister)
    {
    // TODO: Verify that your control follows apartment-model threading rules.
    // Refer to MFC TechNote 64 for more information.
    // If your control does not conform to the apartment-model rules, then
    // you must modify the code below, changing the 6th parameter from
    // afxRegInsertable | afxRegApartmentThreading to afxRegInsertable. if (bRegister)
    return AfxOleRegisterControlClass(
    AfxGetInstanceHandle(),
    m_clsid,
    m_lpszProgID,
    IDS_DTSOCK,
    IDB_DTSOCK,
    afxRegInsertable | afxRegApartmentThreading,
    _dwDTSockOleMisc,
    _tlid,
    _wVerMajor,
    _wVerMinor);
    else
    return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
    }
    /////////////////////////////////////////////////////////////////////////////
    // Licensing stringsstatic const TCHAR BASED_CODE _szLicFileName[] = _T("DTSock.lic");static const WCHAR BASED_CODE _szLicString[] =
    L"Copyright (c) 2009 微软中国";
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::CDTSockCtrlFactory::VerifyUserLicense -
    // Checks for existence of a user licenseBOOL CDTSockCtrl::CDTSockCtrlFactory::VerifyUserLicense()
    {
    return AfxVerifyLicFile(AfxGetInstanceHandle(), _szLicFileName,
    _szLicString);
    }
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::CDTSockCtrlFactory::GetLicenseKey -
    // Returns a runtime licensing keyBOOL CDTSockCtrl::CDTSockCtrlFactory::GetLicenseKey(DWORD dwReserved,
    BSTR FAR* pbstrKey)
    {
    if (pbstrKey == NULL)
    return FALSE; *pbstrKey = SysAllocString(_szLicString);
    return (*pbstrKey != NULL);
    }
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::CDTSockCtrl - ConstructorCDTSockCtrl::CDTSockCtrl()
    {
    InitializeIIDs(&IID_DDTSock, &IID_DDTSockEvents);
    numperb=64;//初始情况每个板传64个能量值高能32低能32
    bperbag=27;//初始情况是16块板的探测器,每个包传9块板
    nofbag=0;//当前是第一个包
    maxnofbag=1;//每一行数据包含几个包

    m_Recvpf=(WORD*)GlobalAlloc(0,numperb*bperbag*(maxnofbag+1)*LINES*2*2);
    m_Recvpl=(WORD*)GlobalAlloc(0,numperb*bperbag*(maxnofbag+1)*2);
    m_offset=(int*)GlobalAlloc(0,numperb*bperbag*(maxnofbag+1)*4);
    m_gain=(float*)GlobalAlloc(0,numperb*bperbag*(maxnofbag+1)*4);}
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::~CDTSockCtrl - DestructorCDTSockCtrl::~CDTSockCtrl()
    {
    }
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::OnDraw - Drawing functionvoid CDTSockCtrl::OnDraw(
    CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
    {
    pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
    pdc->Ellipse(rcBounds);
    }
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::DoPropExchange - Persistence supportvoid CDTSockCtrl::DoPropExchange(CPropExchange* pPX)
    {
    ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    COleControl::DoPropExchange(pPX);}
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::OnResetState - Reset control to default statevoid CDTSockCtrl::OnResetState()
    {
    COleControl::OnResetState();  // Resets defaults found in DoPropExchange
    }
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl::AboutBox - Display an "About" box to the uservoid CDTSockCtrl::AboutBox()
    {
    CDialog dlgAbout(IDD_ABOUTBOX_DTSOCK);
    dlgAbout.DoModal();
    }BYTE rightrot(BYTE a, int n)
    {
    int rb;
    while(n-->0)
    {
    rb=(a & 1)<<(8-1);
    a=a>>1;
    a=a|rb;
    }
    return (a);
    }DWORD WINAPI RecvPro(LPVOID lpParameter) 
    {
        SOCKET sock=((RECVDATA*)lpParameter)->sock;
    HWND hwnd=((RECVDATA*)lpParameter)->hwnd;
    //    SOCKET sock=*(SOCKET*)lpParameter;
    SOCKADDR_IN addrFrom;
    int len=sizeof(SOCKADDR);
      
    int    i,relval;
    int    rot;
    BYTE   Temp;
    char   *pt;
        BYTE   *Recvpb;
        char   *RecvpTemp;
    BYTE   SYMBOL[8];
    WORD   t; Recvpb=(BYTE*)GlobalAlloc(0,numperb*bperbag*(maxnofbag+1)*8);
    RecvpTemp=(char*)GlobalAlloc(0,numperb*bperbag*(maxnofbag+1)*8);
    while(1)
    {
    ::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)Recvpf);
    }
        return 0;
    }
    BOOL CDTSockCtrl::InitSocket()
    {
    ////定义套接字
    m_socket=socket(AF_INET,SOCK_DGRAM,0);

    ////创建IP地址信息
    SOCKADDR_IN addrSock;
        addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
    addrSock.sin_family=AF_INET;
        addrSock.sin_port=htons(1234);
    addrSock.sin_addr.s_addr=inet_addr("192.168.1.1");
    ////套接字绑定
    int retval;
    retval=bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));
    if(SOCKET_ERROR==retval)
    {
    closesocket(m_socket);
    // MessageBox("套接字绑定失败!");
    return FALSE;
    }

    return TRUE;
    }
    /////////////////////////////////////////////////////////////////////////////
    // CDTSockCtrl message handlersint CDTSockCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    if (COleControl::OnCreate(lpCreateStruct) == -1)
    return -1;
    //在窗口刚启动时调用初始化函数进行套接字初始化
    InitSocket();
    RECVDATA * pRecvData=new RECVDATA;                       
        pRecvData->sock=m_socket;
    pRecvData->hwnd=m_hWnd;
    //在堆区创建SOCKET类型指针并初始化,将作为线程参数传人线程函数
        //创建一个线程
    HANDLE handle=CreateThread(NULL,0,RecvPro,pRecvData,0,0);
    CloseHandle(handle);
    return 0;
    }void CDTSockCtrl::OnRecvData(WPARAM wParam,LPARAM lParam)
    {

    FireRecvEv((long*)Recvpf);
    // MessageBox(tempBuf);
    }
      

  14.   

    这是你缺少对应的lib库文件
    工程中包含ws_32.lib
      

  15.   

    头文件我已经有了#include "winsock2.h"
    .h文件和.cpp文件里面都包含了,但是我不清楚那个ws_32.lib我应该怎么包含进我的工程?它一般在哪里放着?我刚才在我电脑里没有搜到!
      

  16.   

    好像是缺少套接字相关的库文件   试试方法:Project->Settings->Link->Object/libary modules:加上ws2_32.lib   
      

  17.   

    ws_32.lib可以放在project->setting->link的object modules中。
      

  18.   

     或者 #pragma comment(lib, "ws2_32.lib")