|
// #if !defined(AFX_EXAMDLG_H__DCC76736_D760_498D_89AD_D03491220AFB__INCLUDED_) #define AFX_EXAMDLG_H__DCC76736_D760_498D_89AD_D03491220AFB__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include <winsock2.h> ///////////////////////////////////////////////////////////////////////////// // CExamDlg dialog class CExamDlg : public CDialog { // Construction public: CExamDlg(CWnd* pParent = NULL); // standard constructor WSADATA wsaData; SOCKET clientsocket; SOCKET broadsocket; struct sockaddr_in sa; BOOL IsTrue; CData msg; struct SENDDATA { char data1[1000]; char data2[1000]; } senddata; // Dialog Data //{{AFX_DATA(CExamDlg) enum { IDD = IDD_EXAM_DIALOG }; CIPAddressCtrl m_groupip; CIPAddressCtrl m_hostip; CListBox m_MSGS; CString m_MSG; CString m_MSG2; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CExamDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL LRESULT OnReadClose (WPARAM wParam,LPARAM lParam); // Implementation protected: HICON m_hIcon; // Generated message map functions //{{AFX_MSG(CExamDlg) virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnSend(); afx_msg void OnConnect(); afx_msg void OnAdd(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_EXAMDLG_H__DCC76736_D760_498D_89AD_D03491220AFB__INCLUDED_) 上面那些是我在一程序里的头文件,开始时我只定义了一个SOCKET clientsocket; 使用TCP,程序都没问题。 后来我想在程序里实现多播与TCP的选择,就在头文件里加上 SOCKET broadcastsocket; 程序编译时通过,但有;运行是出现下面问题: --------------------------- exam.exe - 应用程序错误 --------------------------- "0x00401547" 指令引用的 "0x066b053d" 内存。该内存不能为 "written"。 要终止程序,请单击“确定”。 要调试程序,请单击“取消”。 --------------------------- 确定 取消 --------------------------- 是不是说在一个头文件了不能定义两个SOCKET,我以前在头文件里定义两个 SOCKET 对象也不行,希望高手能给一个解答, 在此先谢了。 |
|
|
|
如果你只是定义了还没有使用就出错,我看可能是VC的问题了,不知你装了sp5了没有?
|
|
|
使用了,我装的是SP4,这个跟系统补丁有关系吗?
|
|
|
SOCKET的定义就是一句柄,你要是没有调用它是不该出错的,你还是检查调用它的地方有什么不对的吧。
|
|
|
有时候在一个好的程序里,再加上一个SOCKET的定义(程序里已经有一个SOCKET定义),程序运行没有错,但运行完后,程序的对话框界面出不来。
|
|
|
问题不在这里,其他地方
你 取消,然后跟踪一下程序,看问题出在哪里? |
|
|
楼上的,请你说清楚点,你的话我看不太明白。
|
|
|
看来还是你程序其他地方的错,定义不会有错的,只是定义使得你原来隐藏的错暴露出来了。你自己仔细调试一下吧!情况不清我们也帮不上什么忙。
|
|
|
在VC的“编译”菜单中有一项“清洁”选项,你先执行这个选项,然后再编译一次,然后再执行看看。
|
|
|
我那段程序放了几天没有改,今天准备按各位老兄说的调试时,还没改运行一下竟然可以了,
搞的我莫名其妙,是不是VC都这么变态。 |
|
|
主要是因为盗版的VC有很多问题,有时候在类视图中刚刚定义的类自己会突然消失!!
建议大家使用比较可靠的盗版。 |
|
|
不是盗版的问题,
盗版给了我们很多方便了。 你程序再仔细看看吧。 |
|
|
sevencat(七猫) 我刚开始学WINSOCK ,我看了你在CSDN的网络这版一些帖子,感觉自己的水平有进,希望以后能得到你更多的指点。
|
|