我写的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我想问问大家我该怎么改呢?
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我想问问大家我该怎么改呢?
解决方案 »
- 请教大侠:如何判断菜单是否在弹出状态?
- 为CTreeCtrl控件添加右键菜单
- Tab问题
- 怎么关闭系统的音量?MUTE??
- 使用SendMessage(WM_COMMAND,ID_FILE_PRINT),如何才能让打印对话框不出现?
- inno setup制作的卸载程序如何在卸载完成时打开指定网页?
- Windows Update Agent API中BeginDownload与EndDownload的使用?
- 推荐点资料吧 高手们
- 如何改变按钮形状
- 高手出招:用ATL编写的窗口程序(EXE)中加入了ADO/DB GRID,配置好后编译正常却不能看到数据内容,好象是DB没有OPEN,同样的配置在MFC编写的程序中一切正常,WHY?
- 请教下VC++如何获得子对话框的指针?
- 关于MFC编程中出现的First-Chance Exception的问题
E:DTSockCtl.cpp(242) : error C2065: 'RecvPro' : undeclared identifier
E:DTSockCtl.cpp(288) : error C2373: 'RecvPro' : redefinition; different type modifiers
==这叫编译时出错,不是运行时出错。
error C2065: 'RecvPro' : undeclared identifier 可能是你定义的一个RecvPro 但其作用域不在CDTSockCtrl::OnCreate中 error C2373: 'RecvPro' : redefinition; different type modifiers 重复定义 你检查下你得code 都那些地方定义了 RecvPro。如果RecvPro定义在某个头文件中的全局变量,而你包含了那个头文件后又定义了一个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中呢?谢谢了!
如果是全局变量 如果能的话 尽量定义在.cpp中 而不要定义在头文件中 那样最容易引起重复包含
// 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;
}
#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)
又报错:好像是涉及到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 时出错.
#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);
}
工程中包含ws_32.lib
.h文件和.cpp文件里面都包含了,但是我不清楚那个ws_32.lib我应该怎么包含进我的工程?它一般在哪里放着?我刚才在我电脑里没有搜到!