说一说为什么gethostbyname用完后不用linux释放内存命令

指针的内存释放 - 博客频道 - CSDN.NET
Cool2Feel的博客
只为学习,无关方式?
分类:c/c++
好几年没用C/C++了,由于项目需要,重拾C/C++,使用中时不时的有种亲切感涌来。由于C/C++的自由,让人痛苦但更是让人喜欢的原因,一些经验和技巧显得尤为重要。
&&& 最近总是想不明白,一个函数返回一个内存或者对象的指针,那么这个指针指向的对象(内存)到底由谁来释放?要知道,函数返回指针,通常是给外部临时使用的,其指向的内存通常由函数或者成员函数所在的对象自己来管理,其实就是遵从一个原则:自己的事自己做。
&&& 如果返回一个函数中的临时变量地址,很显然,当执行return后,出了临时变量的作用区,变量将被销毁,这个指针指向的内存就被释放掉了,系统可能在任何时候修改它,这个指针实际变成了野指针,外部使用它是相当危险的;
&&& 如果函数是个类的成员函数,我们能想到的是在对象中申明一个指针,由对象来管理它,成员函数只管使用,但问题是,如果有很多这样的函数,岂不是有很多这样的、只为函数存在的一些奇奇怪怪的指针?
&&& 实际上,解决办法很简单——使用静态变量!——前面不是空了,而是白了,想看的,自己先想想答案,然后再想办法看吧 :0
来段代码:
//&取得Xml元素的值
//&itemName:元素名
//&buff:查找缓冲区
//&return:value字符串
char*&XmlPack::getElementValue(char*&itemName,&char*&buff)
&&&&static&char&value[<span style="color:#];
&&&&int&itemLen&=&strlen(itemName);
&&&&char*&itemStart&=&new&char[itemLen&&#43;&<span style="color:#];
&&&&memset(itemStart,&'\0',&itemLen&&#43;&<span style="color:#);
&&&&itemStart[<span style="color:#]&=&'&';
&&&&itemStart[itemLen&&#43;&<span style="color:#]&=&'&';
&&&&strncpy(itemStart&#43;<span style="color:#*sizeof(char),&itemName,&itemLen);
&&&&char*&itemEnd&=&new&char[itemLen&&#43;&<span style="color:#];
&&&&memset(itemEnd,&'\0',&itemLen&&#43;&<span style="color:#);
&&&&itemEnd[<span style="color:#]&=&'&';
&&&&itemEnd[<span style="color:#]&=&'/';
&&&&itemEnd[itemLen&&#43;&<span style="color:#]&=&'&';
&&&&strncpy(itemEnd&#43;<span style="color:#*sizeof(char),&itemName,&itemLen);
&&&&char*&pos1&=&strstr(buff,&itemStart);
&&&&if(pos1&!=&NULL)
&&&&&&&&pos1&&#43;=&strlen(itemStart);
&&&&&&&&char*&pos2&=&strstr(pos1,&itemEnd);
&&&&&&&&if(pos2&!=&NULL)
&&&&&&&&&&&&assert((unsigned&int)(pos2-pos1)&sizeof(value));
&&&&&&&&&&&&memset(value,&'\0',&sizeof(value));
&&&&&&&&&&&&strncpy(value,&pos1,&pos2-pos1);
&&&&&&&&&&&&delete[]&itemS
&&&&&&&&&&&&delete[]&itemE
&&&&&&&&&&&&return&
&&&&delete[]&itemS
&&&&delete[]&itemE
&&&&return&NULL;
&&&& 但是需要特别注意的是,使用局部静态变量是线程不安全的,是一个不可重入函数。
&&&& 解决这个问题的标准、权威的做法还是调用者提供存储空间,通过参数传入地址,这样,调用者可以使用局部变量来获取处理结果。这种方式麻烦,但是权威。下面一段文字来自Sun公司对多线程模型的讨论(《多线程编程指南》o 2006年10月,P231, 所有权归Sun公司所有):
引用 —— 《多线程编程指南》o 2006年10月,P231, 所有权归Sun公司所有
示例9–2 gethostbyname() 问题:
struct hostent *gethostbyname(char *name) {
/* Lookup name in hosts database */
/* Put answer in result */
return(&result);
通常情况下,使用返回到局部变量的指针不是一个好办法。在本示例中使用指针有
效,是因为变量是静态的。但是,当两个线程同时使用不同的计算机名称调用此变量
时,使用静态存储会发生冲突。
与errno 问题一样,可以使用线程特定数据来替换静态存储。但是,此替换涉及到动态
分配存储,并且会增加调用开支。
处理该问题的更好方法是使gethostbyname() 的调用方为调用结果提供存储。调用方可
通过例程的其他输出参数来提供存储。其他输出参数需要gethostbyname() 函数的新接
在线程中常使用此技术来解决许多问题。在大多数情况下,新接口的名称就是原有名
称附加&_r&,如gethostbyname_r(3NSL)。
排名:千里之外
(1)(9)(6)(4)(1)(2)(1)孙鑫VC++课程中用到的函数一览
孙鑫VC++课程中用到的函数一览
发布时间: 1:29:36
编辑:www.fx114.net
本篇文章主要介绍了"孙鑫VC++课程中用到的函数一览",主要涉及到孙鑫VC++课程中用到的函数一览方面的内容,对于孙鑫VC++课程中用到的函数一览感兴趣的同学可以参考一下。
&& 在许多VC教科书中这些函数/方法、结构、宏等比较常见,觉得比较重要,虽然不用记住,但应该知道,所以列举出来,没写出参数和返回值情况,编写程序时还需仔细查看MSDN文档。本人英语水平较差再加上自己的一些理解,可能有不少错误,仅供初学者参考。
CSize说明一个矩形的高和宽,调用CDC::GetTextExtent成员函数计算使用当前字体的一行文字的高和宽决定的尺寸。
CString::LoadString把一个由nID标识的字符串资源读取到现有的CString对象中。&
CDC::BeginPath:打开设备上下文中的路径,路径打开后,应用程序可以开始调用GDI画图函数定义位于路径上的点。&
CDC::SelectClipPath选择当前路径作为设备上下文的剪切区域,通过使用指定模式与任何现有的剪切区域合并(所有绘制工作都只作用于该剪切区域)。
CDC::GetTextMetrics:取回使用属性设备上下文的当前字体尺寸。
CDC::CreateSolidCaret:为系统创建实心矩形光标并声明。&
CDC::CreateCaret:为系统光标创建一个新图形,使用Show Caret显示光标。
CDC::SetTextColor:把文字颜色设定为指定色。
CDC::GetBkColor:返回当前指定颜色。
CDC::SetCaretPos:设置光标位置&
CDC::DrawText:调用该成员函数在给定矩形中输出格式化文字,可输出多行文字并规定对齐方式和使用何种风格。
CMenu::CheckMenuItem:从弹出菜单的菜单项上添加或删除复选标记。
CMenu::SetDefaultItem:为指定菜单设置默认菜单项。&
Cwnd::GetMenu():取回一个指向该窗口菜单的指针。
&Cwnd::GetSubMenu():取回弹出菜单的CMenu类对象。&
SDK GetSystemMetrics:取回各种系统尺寸和系统配置设置。所有由GetSystemMetrics函数取回的尺寸都以象素为单位。&
CMenu::SetMenuItemBitmaps:为菜单项添加一幅指定位图&
CMenu::EnableMenuItem:激活、取消或变灰一个菜单项。&
CWnd::SetMenu:把当前菜单设置为指定菜单。&
::DestroyMenu:该函数销毁指定菜单并释放该菜单占用的内存。&&
CMenu::Detach:把一个CMENU对象与一个Windows菜单分开并返回该句柄。&
CCMDUI::m_nIndex:菜单项,工具栏或其它由CCMDUI对象表示用户界面对象的索引。&
CCMDUI::m_nID:菜单项,工具栏或其它由CCMDUI对象表示用户界面对象的ID。&
CCMDUI::Enable:该函数使菜单项有效或无效。&
CWnd::OnContextMenu:当用户在该窗口点击右键时由框架调用。可以使用TrackPopupMenu显示上下文菜单处理这条消息。
CWnd::TrackPopupMenu:在指定位置显示浮动弹出窗口并跟踪弹出菜单的菜单项。
CWnd::Clienttoscreen:把显示器上给定的点或矩形的客户坐标转换成屏幕坐标。&
CPoint::Offset增加Cpoint对象的x和y成员的值。
CWnd::Getstyle:返回当前窗口式样。&
CMenu::CreatePopupMenu:创建一个弹出菜单并与Cmenu对象联系起来。&
CMenu::AppendMenu:在菜单的末尾添加一个新菜单项。&&
CMenu::Insertmenu:往指定位置插入一个菜单,其后的菜单项向后移。&
CMenu::DeleteMenu:从菜单中删除一个菜单项。&
CWnd::OnCommand:当用户选择一个菜单项时,或子控件发送通知消息时,再或当快捷键键击时框架调用这个成员函数。&
CFrameWnd::GetActiveView:调用该函数获得与框架窗口相关的活动视窗。&
CStringArray:支持Cstring对象的数组的集合类。&
CWnd::DrawMenuBar:重画菜单栏。当该窗口已经创建后菜单栏发生变化时调用该成员函数。
CDialog::OnInitDialog:调用该成员函数对WM_INITDIALOG消息做出反应。当Create, CreateIndirect或DoModal调用时这条消息发送到对话框,这些调用发生在对话框窗口刚要显示之前。当对话框初始化时如果需要执行特定处理重写这个成员函数。&
CButton::Create:创建一个按键控件并将其与CButton对象关连起来。&
CWnd::GetDlgItem:取回对话框或其它窗口中指定控件或子窗口的指针。&
CWnd:GetWindowText:将Cwnd标题复制到由lpszstringbuf指向的子符串中。&
C:& atoi:将一个字符串转化为整数。&
itoa:将一个整数转化为字符串。&
CWnd::SetWindowText:将窗口标题设置为指定文字。
CWnd::GetDlgItemText:调用这个成员函数取回与对话框中某个控件相关的标题或文字。&
CWnd::SetDlgItemText:设置一个窗口或对话框中的控件的标题或文字。
CWnd::GetDlgItemInt:取回由nID标识控件的文字。&
CWnd::SetDlgItemInt:把对话框中给定控件的文字设置为代表指定整数值的字符串。&
CWnd::UpdateData:调用该函数初始化对话框的数据(FALSE)或取回并更新对话框数据(TRUE)。&
::SendMessage:该函数将指定消息发至一个或多个窗口,不立即返回。&
WM_GETTEXT:由应用程序发送该消息把与窗口相关的文字复制到调用者提出的字符串中。&
CWnd::SendDlgItemMessage:给控件发送一条消息。使用该函数等同于获得指定控件的CWnd*并调用SendMessage成员函数。&
EM_SETSEL:这个消息选中编辑控件的字符范围。&
CWnd::SetFocus:声明输入焦点,返回值为指向前一个拥有输入焦点的窗口的指针。&
CRect::IsRectNull:判断CRect的上,左,下,右是否都为0。
CRect::IsRectEmpty:判断CRect是否为空。&
CWnd::GetWindowRect:取回窗口边界尺寸。&
CWnd::SetWindowPos:调用这个成员函数改变弹出窗口、顶层窗口和子窗口大小,位置和z序。&
CWnd::GetNextWindow:搜寻窗口管理器列表中下一个或前一个窗口。&
CWnd::GetWindow:返回所需窗口的指针。&
CWnd::GetNextDlgTabItem:取回由WS_TABSTOP式样产生的第一个控件的指针,或指定该控件前面的或后面的指针。
CFont::CreatePointFont:该函数可以方便地创建指定字体名称和大小的字体。&
CPropertySheet:属性表单由一个CPropertySheet对象和一个或多个CPropertyPage对象组成。先调用构造函数再调用DoModal或Create,与对话框操作类似。&
如果创建向导,只需在DoModal前调用SetWizardMode即可。&
激活向导按键,调用从OnSetActive中调用,SetWizardButtons,使用标记(dwFlags)自定义功能和外观。&
在用户填完向导最后一页时,调用SetFinishText激活完成按键。&
CWnd::Invalidate():当下条WM_PAINT消息发生时,客户区域标记要重绘。CWnd更新区域非空且应用程序消息队列中没有其它消息时Windows发送WM_PAINT消息。如果参数为TRUE当调用BeginPaint成员函数时将清除背景。&
CPropertySheet::AddPage将提出的属性页增加到表单最右端。&
CPropertyPage::OnSetActive:该成员函数由框架窗口调用,当用户选择某一页面时,且该页面变为活动页面。&
CPropertyPage::OnWizardNext:当用户点击向导上的Next的按键时由框架窗口调用该成员函数。
重写CDialog::OnInitDialg的意图:初始化对话框控件。&
CComboBox::SetCurSel:在组合框列表框中选择一个字符串。&
CPropertyPage::OnWizardFinish:用户点击向导的完成按钮时框架调用该成员函数。&
CCombobox::GetCurSel:调用该函数判断组合框中选择哪项,以0为索引。&
CCombobox::GetLBText:从组合框的列表框中得到字符串。&
::SetWindowLong:该函数更改指定窗口属性。&
某些数据被隐藏,因此所做的更改直到调用SetWindowPos函数才生效。&
如果使用GWL_WNDPROC替换窗口过程,窗口过程必须遵从WindowProc:回调函数介绍中指定的步骤。&
返回值为前一个指定的32位整形值。&
::SetClassLong:该函数将特定偏移量的指定的32位(Long)值替换为指定窗口属于那个类的WNDCLASS结构的额外类内存。&
AfxGetInstanceHandle:该函数取回当前应用程序的实例句柄。&
MAKEINTRESOURC:该宏把一个整形值转换为与资源管理函数兼容的资源类型,该宏用于替换包含资源名的字符串。
CTime:代表绝对时间和日期。
GetCurrentTime:返回当前时间的对象。&
Format将CTime的对象转换为格式化字符串。&
CStatusBar::CommandToIndex:获得指定ID的指示符索引。&
CStatusBar::SetPaneInfo:将指定指示符窗格设置为新的ID,式样和宽度。&
CStatusBar::SetPaneTex:调用该函数把窗格文字设置为lpsznewText指定的字符串。&
CStatusBar::GetItemRect把由nIndex指定的指示符坐标复制到lprect指向的结构中。&
CProgressCtrl:提供Windows一般进度条控件的功能。&
CProgressCtrl::Create:创建一个进度条控件并把它与CProgressCtrl对象联系起来。&
CProgressCtrl::SetPos:设置进度条控件当前位置为nPos指定位置并重画进度条表现新位置。&
AfxRegisterWndClass:允许注册自定义窗口类。&
CProgressCtrl::StepIt:按增量由进度条当前位置前进并重画进度条反应新位置。&
CWnd::IsWindowVisible:判断给定窗口可视状态。&
CFramewnd::RecalcLayout当标准控制条在显示/隐藏切换时或框架窗口更改大小时由框架调用。&
CFrameWnd::DockControlBar:使一个控制条停靠到框架窗口上。
CFraneWnd::ShowControlBar:调用该成员函数显示或隐藏控制条。&
CWnd::OnPaint:当Windows或应用程序请求重绘应用程序窗口一部分时,框架调用该函数。&
CWnd:: MoveWindow:更改窗口位置和尺寸。&
CWnd::GetDescendantWindow:调用该函数找出由指定ID说明的子窗口。&
CFrameWnd::SetMessagText:调用该函数把一串字符放在ID为0的状态栏窗格上。&
CFrameWnd::GetMessagBar:调用该函数获得状态栏指针。&
基于UDP协议的网络聊天程序实现步骤:
一 非阻塞模式套接字:&
1 在CWinApp的派生类中创建析构函数,用于终止WS_32.DLL的使用。&
2 在其InitInstance函数中加在套接字库。&
3 在CDialog的派生类中创建析构函数,用于关闭套接字。&
4 自定义初始化套接字成员函数和成员变量(CSocket)并初始化。&
5 在该成员函数中进行绑定并请求套接字基于消息通知的网络事件(WSAAsynSelect),要判断这回值情况。&
6 对用户自定义消息进行消息映射。(手工)&
7 在其实现函数中判断参数(LPARAM)的低字是否为所需网络事件:在其中进行接收数据。&
8 对发送按键进行消息映射,实现发送功能。&
二 阻塞模式套接字使用多线程方式:&
1 使用AfxSocketInit全局函数加载套接字版本1.1的套接字库。&
2 在CDialog的派生类中自定义初始化套接字成员函数和成员变量(CSocket)。&
3 在该成员函数进行绑定并判断返回值情况。&
4 在InitDialog成员函数中再创建一个线程用于接收信息,然后关闭线程句柄。定义一个结构体可以传递给线程多个参数,使用完后释放内存。&
5 (自定义)ThreadProc函数用于说明线程起始地址的指针,其参数为传递给使用创建线程函数的lpParam参数的函数的线程数据。&
6 在该函数中接收数据将格式的数据写入字符串。&
7 将一个与产生特定窗口的线程的相关的消息(字符串)放入消息队列中将消息发送出去,不等待线程处理立即返回。&
8 对消息进行消息映射,(编辑框)。手工&
9 对发送按键进行消息映射,发送数据。&
进程间通信四种方式:剪切板、匿名管道、命令管道、邮槽。&
(发送)1 打开剪切板,清空剪切板,调用GlobalAlloc为指定字符串从堆中分配指定数量的字节数,再调用GlobalLock函数锁定一个全局内存对象并返回一个指定该对象内存块第一个字节的指针,接着调用GlobalUnlock函数减少用GMEM_MOVEABLE分配的内存对象相关的锁定计数。每个内存对象的内部数据结构包括一个初始值为零的锁定计数,对于可移动内存对象GlobalLock函数将计数值加一,而GlobalUnlock函数将其减一,计数减小到零,才可以被移动或丢弃然后设置剪切板数据,再关闭剪切板。&
(接收)2 打开剪切板调用IsClipboardFormatAvailable函数查看剪切板是否包含指定格式的数据,再调用GetClipboardData函数得到句柄,调用GlobalLock和GlobalUnlock,设置剪切板数据,关闭剪切板。&
AP:1先建立两个句柄用于读和写,在视类中初始化,在析构函数中关闭句柄。&
创建菜单项,创建管道,读数据,写数据,然后命令响应
调用创建管道函数创建管道给安全属性结构赋值,该结构决定返回句柄能否被子进程继承,然后创建子进程,对STARTINFO结构体赋初值,使用ZeroMemory宏,设置状态dwFlags,这里使用标准句柄。&
如果创建失败,关闭读写句柄,并将其设置为零,成功关闭PROCESS_INFORMATION结构体句柄。&
读数据,使用Readfile,写数据,使用 WriteFile写入数据。&
2 子进程创建菜单项,读数据,写数据,命令响应。&
手工增加成员函数,窗口创建成功后,第一个调用OnInitialUpdate虚函数,在其中对读写句柄赋值,用GetStdHandle函数。&
NP:1增加管道句柄,初始化,关闭句柄。&
创建菜单项,创建管道,读数据,写数据,命令响应。&
构造命名管道,该函数创建一个命名管道实例,返回一个后来管道操作句柄。&
创建一个事件对象,再调用ConnectNamedPipe函数使命名管道服务器进程等待客户进程,连接到命名管道实例上,对OVERLAPPED结构体赋初值,判断连接是否失败。&
调用WaitforSingleObject函数,当指定对象处于有信号状态或超时间隔到达时返回,判断是否失败。&
2、创建菜单项,连接管道,读数据,写数据,进行命令响应。&
调用WaitNamedPipe函数等待直到超时时间到或指定命名管道实例可用于连接,调用CreateFile打开命名管道。&
ReadFile, WriteFile&
MS:1、创建菜单项,接收数据,命令响应,(服务器)。&
创建邮槽函数调用取文件,关闭句柄。&
2、创建菜单项,发送数据,命令响应(客户)。&
使用CreateFile打开邮槽,WriteFile写入数据,&
CDC::SetBkColor:设置文本背景色。&
CDC::SetBkMode:设置背景模式(透明,不透明)。&
COleControl::SetBackColor:设置库存背景色属性值。&
CWinAPP::LoadStdProfileSettings:在InitInstance成员函数内调用该函数激活并载入最近使用文件的列表和上次预览状态。&
CBitmap::GetBitmap:调用该成员函数取回CBitmap对象的消息。&
CDC::CreateCompatibleDC:创建一个与pDC指定设备兼容的内存设备上下文。内存设备上下文是代表显示界面的内存块,它可以用来在把图形复制到内存设备的实际设备界面之前在内存中准备图形。&
CDC::BitBlt:从源设备上下文把一幅位图复制到当前设备上下文&
CDC::StretchBlt:从源矩形把一幅位图复制到目的矩形,如果需要可以拉伸或压缩位图以适合目的矩形大小。&
CDC::SetPixel:将指定点上的象素设置为crColor指明的颜色
CColorDialog:允许向应用程序中添加颜色选择对话框。系统对话框&
C::m_cc:CHOOSECOLOR类型的结构体,其成员保存颜色选择对话框的特征和值。构造CColorDialog对象后,可以使用m_cc数据成员设置对话框各个方面,在调用DoModal前。&
CFontDialog:允许向应用程序中添加字体选择对话框。&
CGdiObject::m_hObject:一个HANDLE包含与该对象相关的HBITMAP,HRGN,HBRUSH,HPEN,HPALETTE或 HFONT。&
CGdiObject::DeleteObject:通过释放与Windows GDI对象相关的所有系统存储从内存中删除相关的该对象。&
CFont::CreateFontIndirect:用lpLogFont指向的LOGFONT结构给出的特征初始化CFont对象。&
CWnd::OnEraseBkgnd:当CWnd对象背景需要清除时框架调用该函数。调用它为绘图准备一块无效区域。&
CWnd::ScreenToClient:将显示器上指定点或矩形的屏幕坐标转换为客户坐标。&
CWnd::OnCtlColor:当子控件将要显示时框架调用该成员函数。&
CWnd::GetDlgCtrlID:返回任何子窗口的窗口或控件ID。&
CDC::SetTextColor:将文本颜色设置为指定颜色。&
CDC::Drawtext:调用该成员函数格式化给定矩形中的文字。&
CButton::DrawItem:当自画按键的可视方面改变时由框架调用。&
SDK DrawFrameControl:该函数按指定类型、形式样绘制框架控件。&
CRect::CopyRect:将lpSrcRect矩形复制到CRect。&
SDK DrawFocusRect:该函数绘制一个用来标识该矩形拥有焦点式样的矩形。&
CDC::Draw3dRect:调用该函数绘制一个三维矩形。&
SDK GetSysColor:该函数取回指定显示元素的当前显色。&
CView::OnInitialUpdate:视第一次与文挡关联后,但在视被显示前由框架调用。&
CView::OnDraw:由框架调用粉刷文挡的图象。&
CWnd::OnPaint:当Windows或应用程序请求重绘应用程序窗口一部分时由框架调用。&
CMetaFileDC: 执行一个Windows源文件,其中包含一系列可以产生所需图形或文字的图形设备接口命令。要执行Windows源文件, 首先创建CMetaFileDC对象,调用CMetaFileDC构造函数,然后调用Create成员函数,创建Windows源文件设备上下文并使之与对象相关联。&
Close成员函数关闭源文件设备上下文并返回源文件句柄,然后删除CMetaFileDC对象不在需要源文件时,用DeleteMetaFile函数从内存中删除它。&
CPtrArray:支持空指针的数组。&
CDC::PlayMetaFile:使用源文件句柄可以用来反复播放源文件。&
CBitmap::CreateCompatibleBitmap:初始化一个与pDC说明的设备相兼容的位图。&
CView::OnPrepareDC:在屏幕显示调用OnDraw成员函数之前和打印或打印预览每页之间调用OnPrint成员函数之前由框架调用。&
CDC::DpToLp:把设备坐标转换为逻辑坐标。&
可以认为CDC所有成员函数都以逻辑坐标为参数,但和CRect有关的函数例外。可以认为CWnd的成员函数都以设备坐标作为参数。要以逻辑坐标保存数据。&
CScrollView::SetScrollSizes:当视要更新时调用。在重写的OnUpdate成员函数中调用调整滚动特性。&
SDK CopyMetaFile:该函数将Windows格式源文件复制到指定文件。&
SDK GetEnhMetaFile:该函数创建一个保存在指定文件中标识增强格式源文件的句柄。&
SDK WriteProfileString:该函数把一个字符串复制到win.ini文件的指定部分。
SDK GetProfileString:该函数取回与win.ini文件指定部分的与某个键相关的字符串。
CFileDialog:封装了windows普通文件对话框。
CFileDialog::GetFileName:调用该函数取回输入对话框的文件名。
SDK RegCreateKey:调用该函数创建指定的注册键,如果在注册表中存在该键,就打开它。&
RegSetValue:该函数设置默认的数据或指定注册键无名值,数据必须是字符串。
RegSetValueEx:该函数设置注册键下指定值的数据和类型。&
RegCloseKey:该函数释放指定注册键的句柄。&
RegQueryValue: 该函数取回与指定注册键默认或无名值相关类的数据。&
SDK RegOpenKey:该函数打开指定注册键。&
IMPLEMENT_SERIAL:产生有运行时访问权的动态CObject派生类的类名的必要C++ 代码继承图表的位置。该宏用于当从CObject继承一个可串行化的类时定义所需的各种函数。&
DECLARE_SERJAL:宏用于声明支持串所化的类,产生一个可以被串行化的CObject派生类的必要C++头文件代码。&
从文挡中读对象或将对象写入文挡中。&
使用CArchive::IsLoading 或CArchive::IsStoring判断文档是载入还是存储。&
CDocument::OnNewDocument:由框架调用作为FileNew命令的一部分。这个函数的默认执行是调用DeleteContents成员函数确保文档为空并标记新文档为空,重写该函数初始化新文档的数据结构。&
如果用户在SDI应用程序中选择FileNew命令,框架使用该函数重新初始化现有的文档,不是创建新的。
&CDocument::SetTitle:调用该函数说明文档的标题。(字符串显示在框架窗口的标题栏中)
CDocument::GetFirstViewPosition:调用该函数获得与文档关联的视列表中第一个视的位置。&
CDocunment::GetNextView:调用该函数在文档的视中循环,返回由rPosition标识视的指针。&
CArchive:允许以二进制形式永久的保存对象的复杂网络。&
CDocument::Deletecontents:由框架调用删除文档中数据而不销毁CDocument对象自身。在该文档要被销毁之前调用,也被调用确保在重新使用前文档为空。&
(Windows Sockets)& bind:该函数与套接字的本地地址相关。&
在调用Connect或Listen函数之前这个函数用在一个断开的套接字上。该函数可以用来绑定面向连接(流式)或面向无连接的(数据报)套接字。当调用(Windows Sockets) Socket函数创建套接字时,它存在于一个命名空间(地址族)中但并没有给它分配名字。通过给无名套接字分配一个本地名使用Bind函数建立该套接字的本地联合。
sockaddr:该结构根据所选的协议不同而不同,除了Sa_family参数,sockaddr其它成员以网络字节序表示,sa_family必须是AF_INET。
在TCP/IP中,可以用 sockaddr_in 结构替换sockaddr,以方便填写地址信息。
Sockaddr_in:在Internet地址族中,该结构由Windows套接字使用来说明与套接字连接的本地或远程端点地址。如果该函数调用成功返回0,失败则返回SOCKET_ERROR,由WSAGetLastError返回。将IP地址指定为INADDR_ANY, 允许套接字向任何分配给本地机器的IP地址发送或接收数据。
将地址指定为INADDR_ANY, 允许一个独立应用接受发自的多个接口的回应。如果只想让套接字使用多个IP地址的一个,就必须指定实际地址,可使用inet-addr()函数,该函数需要一个指定以点分十进制格式表示IP地址的字符串做为其参数,并返回一个适合分配给S_ADDR的u_long类型的数值。inet_ntoa()函数完成相反转换,接受in_addr结构体类型参数,返回以点分十进制格式表示的IP地址字符串。
htonl:该函数将一个主机的u_long类型成员转换为TCP/IP网络字节序。
htons: 该函数将一个主机的u_Short类型成员转换为TCP/IP网络字节序。&&&&&
listen:该函数把一个套接字设置为处于监听到来的连接状态。
accept:该函数允许在套接字上接受到来的连接的请求。
send:该函数在处于已连接状态的套接字上发送数据。
recv:该函数从连接的或绑定的套接字接收数据。
closesocket:关闭现在使用的套接字。
WSADATA结构内含关于Windows套接字库信息。
WSACleannp函数终止WS2_32.DLL的使用。
recvfrom:该函数接收数据报并保存源地址。
sendto:该函数将数据发送到指定目的地。
Server:基于TCP(面向连接)的Socket编程
1、&&&&&&&&&&&&& 创建套接字(socket)
2、&&&&&&&&&&&&& 将套接字绑定到本地地址和端口上(bind)
3、&&&&&&&&&&&&& 将套接字设为监听模式,准备接收客户请求(listen)
4、&&&&&&&&&&&&& 等待客户请求到来,请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)
5、&&&&&&&&&&&&& 用返回的套接字与客户端进行通信(send/recv)
6、&&&&&&&&&&&&& 返回,等待另一客户请求
7、&&&&&&&&&&&&& 关闭套接字
1、&&&&&&&&&&&&& 创建套接字(socket)
2、&&&&&&&&&&&&& 向服务器发出连接请求(connect)
3、&&&&&&&&&&&&& 和服务器进行通信(send/recv)
4、&&&&&&&&&&&&& 关闭套接字
基于UDP(面向无连接)Socket的编程
Server:服务器端(接收端)程序:
1、&&&&&&&&&&&&& 创建套接字(Socket)
2、&&&&&&&&&&&&& 将套接字绑定到一个本地地址和端口上(bind)
3、&&&&&&&&&&&&& 等待接收数据(recvfrom)
4、&&&&&&&&&&&&& 关闭套接字
客房端Client:(发送端)程序
1、&&&&&&&&&&&&& 创建套接字(socket)
2、&&&&&&&&&&&&& 向服务器发送数据(sendto)
3、&&&&&&&&&&&&& 关闭套接字
AfxSocketInit:在CWinAPP::InitInstance中调用该函数初始化Windows套接字。加载套接字1.1版本。
CreateThread:该函数创建一个线程在调用线程的进程的虚拟地址空间中执行。
ThreadProc:该函数是应用程序定义的函数,用作线程的起始地址。
线程对象存在于系统中直到线程终止,通过调用CloseHandle关闭它的所有句柄。
socket:该函数创建一个与指定服务提供者绑定的套接字。
CIPAddressCtrl:提供Windows一般IP地址控件功能。
CIPAddressCtrl::GetAddress:取回IP地址控件中完整地址值。
CreateEvent:该函数创建或打开一个命名或无名事件对象。
如果为手工重置,该函数产生一个手工重置事件对象,需要使用ResetEvent函数把事件状态设置为无信号,如果为自动重置,产生一个自动重置事件对象,在单一等待线程释放后,系统自动把事件状态设置为无信号。
使用SetEvent函数将一个事件对象设置为有信号状态。
WaitForSingleObject:当指定对象处于有信号状态或超时时间到时该函数返回。
Sleep:该函数挂起当前线程的执行(最小为指定间隔)。
该函数使一个线程放弃它剩余的时间片在指定最小毫秒间隔内变为不可运行,完后线程继续运行。
InitializeCriticalSection:该函数初始化一个关键代码段对象。
在初始化关键代码段对象后,进程的线程可以在EnterCriticalSection, LeaveCriticalSection函数中说明该对象提供共享资源的互斥访问权。
使用完关键代码段后,调用DeleteCriticalSection函数。
EnterCriticalSection:该函数等待指定关键代码段对象的所有权,当调用的线程同意所有权时函数返回。
LeaveCriticalSection:该函数释放指定关键代码段对象的所有权。
WSACleanup:终止WS2_32.DLL的使用。
WSASocket:该函数创建一个与指定传送服务提供者绑定的套接字。
WSAAsyncSelect:该函数请求套接字网络事件的基于Windows消息通知。该函数用于请求当它探测到lEvent参数指定的任意网络事件时,WS2_32.DLL应该发送一条消息到hWnd窗口。
当命名的网络事件之一发生在指定套接字时,应用程序窗口hWnd接收消息wMsg。参数wParam说明套接字在哪个网络事件上发生的,lParam低字说明发生的网络事件,lParam的高字包含错误代码。
WSABUF结构可以完成数据缓冲区的创建或操作。
WSARecvFrom:接收一个数据报并保存源地址。
hostent结构由函数使用保存指定主机的信息,应用程序不能更改其内容或释放其成员。
gethostbyaddr:该函数取回与网络地址相关的主机信息。
gethostbyname:从主机数据库中取回与主机名相关的主机信息。
WSASendTo:该函数给指定目的地发送数据,在适用的地方使用重叠I/O。
OpenClipboard:打开剪切板并阻止其它应用程序更改剪切板内容,成功调用该函数后应该调用CloseClipboard函数。
EmptyClipboard:该函数清空剪切板并释放剪切板数据的句柄,
然后该函数把剪切板的所有权分配给当前打开剪切板的窗口。
GlobalAlloc:该函数从堆中分配指定数量的字节,Windows内存管理不提供独立的本地堆和全局堆。参数GMEM_MOVABCE分配可移动的内存,在物理内存中内存块不可移动,但在默认堆中可以移动,返回值为内存对象句柄。使用GlobalLock函数可以把句柄转换为指针。
GlobalLock函数锁住一个全局内存对象并返回一个指向该对象内存块第一个字节的指针。
每个内存对象的内部数据结构包括初始值为零的锁定计数,对于可移动内存对象来说,GlobalLock函数使计数加一,GlobalUnlock函数使计数减一。锁定的内存不能移动或废弃除非使用函数重新分配内存对象,锁定内容对象的内存块直到计数减为零才解除锁定,这时该内存可以移动或废弃了。
SetClipboardData:该函数把数据放在指定剪切板格式的剪切板上。
CloseClipboard:关闭剪切板。
IsClipboardFormatAvailable:该函数判断剪切板是否包含指定格式的数据。
GetClipboardData:该函数以指定格式取回剪切板的数据。
SECURITY_ATTIBUTES:该结构包含一个对象的安全描述符并说明由这个结构返回的句柄是否可继承。
CreatePipe:该函数创建一个匿名管道,返回管道的读写末端句柄。
STARTUPINFO:该结构与CreateProcess函数一起使用来说明新进程窗口工作站,桌面,标准句柄和主窗口外观。
PROCESS_INFORMATION:该结构与CreateProcess一起使用,该结构包含新创建进程和它主进程的信息,如果函数调用成功,当用完它们后,要调用CloseHandle函数关闭hProcess和hThread句柄。
ZeroMemory:该宏将一块内存填充为零。
GetStdHandlle:该函数取回标准输入,标准输出,标准错误设备的句柄。
CreateProcess:该函数创建一个新进程和它的主线程,新进程运行调用进程的安全上下文中指定的可执行文件。
WriteFile:该函数向文件指针说明的位置的文件写入数据。
重写OnInitialUpdate函数执行任何文档所需信息的一次性初始化。
CreateNamedPipe:该函数创建一个命名管道实例并返回后来管道操作的句柄。一个命名管道服务器进程使用该函数创建指定命名管道的第一个实例,并创建它的基本属性或创建已存在命名管道的一个新实例。
OVERLAPPED:该结构包含在异步或重叠输入和输出(I/O)中使用的信息。
ConnectNamedPipe:该函数使一个命名管道服务器进程等待客户进程连接到命名管道实例上,通过调用CreateFile或CallNamedPipe函数完成客户进程连接。
WaitNamedPipe:该函数等待直到超时间到或指定命名管道实例可用于连接。
CreateMailSlot:该函数创建一个指定名称的邮槽并返回一个可以用来在邮槽上执行操作的邮槽服务器句柄。
COleControl::InvalidateControl:调用该函数强迫控件重绘自身。
属性在Automation中设置。
COleControl::GetBackColor:返回值说明当前背景颜色值为OLE_COLOR值,调用TranslateColor将该值转换为COLORREF值。COleControl::GetForeColor:执行库存前景色属性的Get函数。
CDC::Setbkcolor:设置文本背景色。
COleControl::SetBackColor:设置BackColor属性值。
DECLARE_PROPPAGEID:声明OLE控件提供一个显示它的属性的属性页列表。
COleControl::BoundProperlyChange:信号通知绑定属性值已经改变。每次属性值改变后必须调用该函数,甚至在不使用属性Set方法作改动的情况下。要特别注意被影射到成员变量的绑定属性,每次该变量改变时,必须调用BoundProperlyChange函数。
AmbientUserMode: (运行时)用户模式返回非0,设计时为0。
CDocument::SetModifiedFlag:在对文档做完任何更改后调用该函数。
COleControl::SetModifiedFlag:改为控件更改状态。当作出的改动影响控件的持久状态时调用该函数。
GetForegroundWindow(void):该函数返回前景窗口句柄,即用户当前操作的窗口。
其它程序访问动态链接库函数,已经被导出的函数
查看:将DLL所在路径复制到命令提示符中,使用dumpbin vcvars32.bat
Dumpbin&&&&&&&&&& -exports&& *.dll
要导出函数,在DLL的函数前加_declspec(dllexport)。
将输入库文件(.lib)和(.dll)文件复制到应用程序文件夹中,不包含实际代码,为链接提供信息,以便在可执行文件(.exe)中建立动态连接时要用到的重定位表
输入信息:
Dumpbin&& imports& *.exe
调试MFC42D.DLL 发布MFC42.DLL
VS6.0 Depcodency Wacker查看依赖哪些DLL
_declspec (dllimport)包含在头文件中说明从*.lib中引入的函数,供给调用动态连接库的客户端服务,也可为DLL自身使用加入。
#ifdef DLL1_API
#define DLL1_API _declspec(dllimport)
DLL源程序中:#define DLL1_API _declspec(dllimport)
如只想导出类的一个函数,将DLL1_API放在函数前
对不同编译器,输出函数名不要改变,
#define Dll1_API
Exten& &C& _delspec(dllimport)
Extern& &C&不能导出类成员函数,只能导出全局函数.
_stdcall标准调用约定,默认为C调用约定。
为Delphi访问时, 用模块定义文件解决名字改编问题 (.def)加入到项目中。
LIBRARY& DLL2指定动态链接库内部名称
EXPORTS隐式链接表示连动本链接库中导出哪些函数,为这些函数指出的符号名
动态加载:Load Library得到导出函数地址: GetProcAddress
Typedef定义类型
FreeLibrary不需要访问动态链接库时调用。
CRuntimeClass:每个从CObject派生出的类都与一个CRuntimeClass结构相关,该结构可以用来获得关于运行时一个对象或它的基类的信息。当需要对函数参数的额外类型检查时判断一个对象是否在运行时类很重要。该结构提供相关C++对象的信息,例如指向基类的CRuntimeClass的指针及相关类的ASCII类名。该结构也执行能用来动态创建对象、使用常见名说明对象类型及判断相关类是否从指定类派生而来的各种函数。
CCreateContext:框架调用该结构当它创建框架窗口和与文档相关的视时。创建窗口时,该结构的值提供用于连接构成文档的部件和视的数据。该结构包含指向文档、框架窗口、视和文档模板的指针,还包含指向标识创建视类型的CRuntimeClass结构的指针。运行时类信息和当前文档指针用来动态创建一个新的视。
STATIC_DOWNCAST:该宏将pObject影射成指向class_name对象的指针。
CreateView:调用该函数在框架内创建视。
SetWindowHookEx:该函数把一个应用程序定义的hook安装到hook链中(放在前面)。应该按装一个hook过程监视系统中确定类型的事件。这些事件可与一个特定线程或相同桌面下调用县城的所有线程相关。要屏蔽所有线程的消息,在动态链接库中实现hook编码。
GetCurrentTreadID:返回当前线程ID。
CallNextHookEx:该函数在当前hook链的下一个hook过程中传递hook消息。
UnhookWindowsHookEx:该函数删除由SetWindowHookEx函数安装在hook链中的一个hook过程。
GetModuleHandle: 如果该文件应经被影射到调用线程的地址空间后,该函数取回指定实例的实例句柄。返回句柄不是全局的或可继承的,不能被复制或被其它线程访问。
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:

我要回帖

更多关于 释放内存 的文章

 

随机推荐