📄 vc++动态链接库编程之基础慨念2.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0050)http://www.pcdog.com/edu/vc/2005/12/k057388_2.html -->
<HTML
xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>VC++动态链接库编程之基础慨念</TITLE><!-- Copyright 2007 Pcdog.com. All rights reserved. -->
<META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK
href="VC++动态链接库编程之基础慨念2.files/pcdog2007page.css" type=text/css rel=stylesheet>
<META content="MSHTML 6.00.2900.3199" name=GENERATOR></HEAD>
<BODY>
<DIV id=masthead>
<DIV id=globalNav>
<LI><A href="http://www.pcdog.com/diy/" target=_blank>硬件咨询</A> </LI>
<LI><A href="http://www.pcdog.com/edu/pc-accidence/" target=_blank>电脑技巧</A>
</LI>
<LI><A href="http://www.pcdog.com/edu/photo-design/" target=_blank>图像处理</A>
</LI>
<LI><A href="http://www.pcdog.com/edu/web-design/" target=_blank>网页设计</A> </LI>
<LI><A href="http://www.pcdog.com/edu/net-program/" target=_blank>网络开发</A> </LI>
<LI><A href="http://www.pcdog.com/edu/program-develop/" target=_blank>桌面开发</A>
</LI>
<LI><A href="http://www.pcdog.com/edu/database-develop/" target=_blank>数据库开发</A>
</LI>
<LI><A href="http://www.pcdog.com/network/" target=_blank>网络技术</A> </LI></DIV>
<DIV id=breadCrumb>您现在的位置: <A
href="http://www.pcdog.com/">pcdog首页</A> > <A title=程序开发
href="http://www.pcdog.com/edu/program-develop/index.html">程序开发</A> > <A
title="Visual C++/MFC" href="http://www.pcdog.com/edu/vc/index.html">Visual
C++/MFC</A> > 正文</DIV></DIV><BR><!-- end masthead -->
<DIV id=content>
<H1 id=pageName>VC++动态链接库编程之基础慨念</H1>
<DIV class=feature>
<P>来源:天极网 作者: 2005-12-19 出处:<A href="http://www.pcdog.com/"
target=_blank>pcdog.com</A></P></DIV>
<DIV class=keyword_list>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-1572879403720716";
google_alternate_color = "F5FAFA";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel ="3984443469";
google_color_border = "F5FAFA";
google_color_bg = "F5FAFA";
google_color_link = "000000";
google_color_url = "F5FAFA";
google_color_text = "000000";
//--></SCRIPT>
<SCRIPT src="VC++动态链接库编程之基础慨念2.files/show_ads.js" type=text/javascript>
</SCRIPT>
</DIV>
<DIV class=keyword_list><BR><A class=link_keywords
href="http://www.pcdog.com/net/2304/index.html"
target=_blank>编程语言</A> </DIV>
<DIV class=page_list><A
href="http://www.pcdog.com/edu/vc/2005/12/k057388.html">上一页</A> <A
href="http://www.pcdog.com/edu/vc/2005/12/k057388.html">1</A> <FONT
color=#ff0000>2</FONT> </DIV>
<DIV class=story><STRONG> 3.库的调试与查看
<P></P>
<P
style="TEXT-INDENT: 2em"></STRONG>在具体进入各类DLL的详细阐述之前,有必要对库文件的调试与查看方法进行一下介绍,因为从下一节开始我们将面对大量的例子工程。</P>
<P
style="TEXT-INDENT: 2em">由于库文件不能单独执行,因而在按下F5(开始debug模式执行)或CTRL+F5(运行)执行时,其弹出如图3所示的对话框,要求用户输入可执行文件的路径来启动库函数的执行。这个时候我们输入要调用该库的EXE文件的路径就可以对库进行调试了,其调试技巧与一般应用工程的调试一样。</P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em">
<CENTER><A href="VC++动态链接库编程之基础慨念2.files/57388-3.jpg" target=_blank><IMG
alt=VC++动态链接库编程之基础慨念(图三) src="VC++动态链接库编程之基础慨念2.files/57388-3.jpg" border=0></A>
<DIV class=ad1>
<DIV id=ad_pcdog_big></DIV></DIV></CENTER>
<P></P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em" align=center>图3 库的调试与“运行”</P>
<P
style="TEXT-INDENT: 2em">通常有比上述做法更好的调试途径,那就是将库工程和应用工程(调用库的工程)放置在同一VC工作区,只对应用工程进行调试,在应用工程调用库中函数的语句处设置断点,执行后按下F11,这样就单步进入了库中的函数。第2节中的libTest和libCall工程就放在了同一工作区,其工程结构如图4所示。</P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em">
<CENTER><IMG alt=VC++动态链接库编程之基础慨念(图四) src="VC++动态链接库编程之基础慨念2.files/57388-4.jpg"
border=0></CENTER>
<P></P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em" align=center>图4把库工程和调用库的工程放入同一工作区进行调试</P>
<P
style="TEXT-INDENT: 2em">上述调试方法对静态链接库和动态链接库而言是一致的。所以本文提供下载的所有源代码中都包含了库工程和调用库的工程,这二者都被包含在一个工作区内,这是笔者提供这种打包下载的用意所在。</P>
<P style="TEXT-INDENT: 2em">动态链接库中的导出接口可以使用Visual
C++的Depends工具进行查看,让我们用Depends打开系统目录中的user32.dll,看到了吧?红圈内的就是几个版本的MessageBox了!原来它真的在这里啊,原来它就在这里啊!</P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em">
<CENTER><A href="VC++动态链接库编程之基础慨念2.files/57388-5.jpg" target=_blank><IMG
alt=VC++动态链接库编程之基础慨念(图五) src="VC++动态链接库编程之基础慨念2.files/57388-5.jpg"
border=0></A></CENTER>
<P>
<P></P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em" align=center>图5用Depends查看DLL</P>
<P
style="TEXT-INDENT: 2em">当然Depends工具也可以显示DLL的层次结构,若用它打开一个可执行文件则可以看出这个可执行文件调用了哪些DLL。</P>
<P style="TEXT-INDENT: 2em">好,让我们正式进入动态链接库的世界,先来看看最一般的DLL,即非MFC DLL。<BR><SPAN
id=ad_pcdog_big_code>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-1572879403720716";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="2957605308";
google_alternate_ad_url ="http://www.pcdog.com/js/336.htm";
google_color_border = "F5FAFA";
google_color_bg = "F5FAFA";
google_color_link = "1F3A87";
google_color_url = "0000FF";
google_color_text = "000000"
google_language = 'zh-CN';
//--></SCRIPT>
<SCRIPT src="VC++动态链接库编程之基础慨念2.files/show_ads.js" type=text/javascript>
</SCRIPT>
</SPAN>
<SCRIPT type=text/javascript>
document.getElementById('ad_pcdog_big').innerHTML=document.getElementById('ad_pcdog_big_code').innerHTML;
document.getElementById('ad_pcdog_big_code').innerHTML="";
</SCRIPT>
</P></DIV>
<DIV class=page_list><A
href="http://www.pcdog.com/edu/vc/2005/12/k057388.html">上一页</A> <A
href="http://www.pcdog.com/edu/vc/2005/12/k057388.html">1</A> <FONT
color=#ff0000>2</FONT> </DIV>
<DIV class=pre_next_art>上一篇:<A title="VC++动态链接库编程之非MFC DLL"
href="http://www.pcdog.com/edu/vc/2005/12/o057387.html"
target=_blank>VC++动态链接库编程之非MFC DLL</A><BR>下一篇:<A title=深入浅出MFC文档/视图架构之文档
href="http://www.pcdog.com/edu/vc/2005/12/z057389.html"
target=_blank>深入浅出MFC文档/视图架构之文档</A><BR></DIV>
<DIV id=picasa_pic></DIV>
<DIV class=pic_area><IFRAME marginWidth=0 marginHeight=0
src="VC++动态链接库编程之基础慨念2.files/CARC5NF0.htm" frameBorder=0 width="100%"
scrolling=no height=130></IFRAME></DIV></DIV><!--end content -->
<DIV id=navBar>
<DIV class=sectionHead>相关专题</DIV>
<DIV class=relatedLinks></DIV>
<DIV id=advert><A href="http://www.pcdog.com/2007hot/picasa/" target=_blank><IMG
height=80 alt=图像处理软件picasa src="VC++动态链接库编程之基础慨念2.files/mypicasaad.jpg"
width=320 border=0></A><BR>
<DIV id=ggad336></DIV></DIV>
<DIV class=sectionHead>热门排行文章</DIV>
<DIV class=relatedLinks>·<A title=基于HOOK和MMF的Windows密码渗透技术
href="http://www.pcdog.com/edu/vc/2007/08/f190402.html"
target=_blank>基于HOOK和MMF的Windows密码渗透技术</A> <SPAN
class=link_hot_reviews>(0次浏览)</SPAN><BR>·<A title=理解MFC控制条窗口布局原理之一
href="http://www.pcdog.com/edu/vc/2007/08/k190602.html"
target=_blank>理解MFC控制条窗口布局原理之一</A> <SPAN
class=link_hot_reviews>(0次浏览)</SPAN></DIV>
<DIV class=sectionHead>最新技术文章</DIV>
<DIV class=relatedLinks>·<A title=理解MFC控制条窗口布局原理之一
href="http://www.pcdog.com/edu/vc/2007/08/k190602.html"
target=_blank>理解MFC控制条窗口布局原理之一</A> 08-30<BR>·<A title=基于HOOK和MMF的Windows密码渗透技术
href="http://www.pcdog.com/edu/vc/2007/08/f190402.html"
target=_blank>基于HOOK和MMF的Windows密码渗透技术</A> 08-28<BR>·<A
title="Visual C++中实现双缓冲的基本原理"
href="http://www.pcdog.com/edu/vc/2007/08/i189329.html" target=_blank>Visual
C++中实现双缓冲的基本原理</A> 08-18<BR>·<A title=从VC++到GCC移植:谈两者语法差异
href="http://www.pcdog.com/edu/vc/2007/08/y189258.html"
target=_blank>从VC++到GCC移植:谈两者语法差异</A> 08-17<BR>·<A title=VC++中MFC窗口对象的清除
href="http://www.pcdog.com/edu/vc/2007/08/i188368.html" target=_blank><FONT
color=#ff0000>VC++中MFC窗口对象的清除</FONT></A> 08-07<BR>·<A
title="VC++ 6.0中实现三叉切分窗口与多视图"
href="http://www.pcdog.com/edu/vc/2007/07/i186559.html" target=_blank>VC++
6.0中实现三叉切分窗口与多视图</A> 06-30<BR>·<A title=VC++中用通讯控件开发串行通信程序
href="http://www.pcdog.com/edu/vc/2007/04/i184918.html"
target=_blank>VC++中用通讯控件开发串行通信程序</A> 04-23<BR>·<A
title="VC控件 TreeCtrl 与 ListCtrl 演示"
href="http://www.pcdog.com/edu/vc/2007/04/i184917.html" target=_blank>VC控件
TreeCtrl 与 ListCtrl 演示</A> 04-23<BR>·<A title=在VC中链接动态链接库的方法简要说明
href="http://www.pcdog.com/edu/vc/2007/04/e184170.html"
target=_blank>在VC中链接动态链接库的方法简要说明</A> 03-31<BR>·<A
title=在VisualStudio中使用Windows桌面搜索
href="http://www.pcdog.com/edu/vc/2007/02/e182272.html" target=_blank><FONT
color=#ff0000>在VisualStudio中使用Windows桌面搜索</FONT></A> 02-06</DIV>
<DIV class=sectionHead>相关文章阅读</DIV>
<DIV class=relatedLinks></DIV>
<DIV class=pic_area></DIV></DIV><!--end navBar div --><!-- google 336X280 ad -->
<DIV id=ggad336code>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-1572879403720716";
google_ad_width = 300;
google_ad_height = 250;
google_ad_format = "300x250_as";
google_ad_type = "text_image";
google_ad_channel ="6414665168";
google_alternate_ad_url ="http://www.pcdog.com/js/336.htm";
google_color_border = "FCFAF3";
google_color_bg = "FCFAF3";
google_color_link = "1F3A87";
google_color_url = "0000FF";
google_color_text = "000000"
google_language = 'zh-CN';
//--></SCRIPT>
<SCRIPT src="VC++动态链接库编程之基础慨念2.files/show_ads.js" type=text/javascript>
</SCRIPT>
</DIV>
<SCRIPT type=text/javascript>
document.getElementById('ggad336').innerHTML=document.getElementById('ggad336code').innerHTML;
document.getElementById('ggad336code').innerHTML="";
</SCRIPT>
<!-- end google 336X280 ad --><!-- google picasa ad --><SPAN id=picasa_picad>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-1572879403720716";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as_rimg";
google_cpa_choice = "CAAQjMeU_AEaCCfCybguyZX1KLj39IMB";
//--></SCRIPT>
<SCRIPT src="VC++动态链接库编程之基础慨念2.files/show_ads.js" type=text/javascript>
</SCRIPT>
</SPAN>
<SCRIPT type=text/javascript>
document.getElementById('picasa_pic').innerHTML=document.getElementById('picasa_picad').innerHTML;
document.getElementById('picasa_picad').innerHTML="";
</SCRIPT>
<!-- end google picasa ad -->
<SCRIPT src="VC++动态链接库编程之基础慨念2.files/clickeye.js"></SCRIPT>
<DIV id=siteInfo>
<SCRIPT src="VC++动态链接库编程之基础慨念2.files/end.js" type=text/javascript></SCRIPT>
<SCRIPT src="VC++动态链接库编程之基础慨念2.files/click.htm" type=text/javascript></SCRIPT>
</DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -