📄 创建动态连接库-vc++编程指南_唐荣军.htm
字号:
<DIV class=postuserinfo>
<DIV
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; PADDING-BOTTOM: 0px; LINE-HEIGHT: 30px; PADDING-TOP: 10px; HEIGHT: 30px">
<DIV
style="FLOAT: left; MARGIN: 3px; WIDTH: 23px; TEXT-INDENT: 0px"></DIV>
<DIV
style="FLOAT: left; MARGIN: 5px; WIDTH: 15px; TEXT-INDENT: 0px"></DIV></DIV>
<DIV></DIV>
<DIV></DIV>
<DIV>头衔:论坛打杂</DIV>
<DIV>等级:系主任</DIV>
<DIV>威望:<FONT color=#ff0000><STRONG>15</STRONG></FONT></DIV>
<DIV>积分:<STRONG><FONT color=#469a40>122967</FONT></STRONG></DIV>
<DIV>现金:1000003134</DIV>
<DIV>文章:7630</DIV>
<DIV>门派:无门无派</DIV>
<DIV>注册:2003年4月22日</DIV></DIV>
<DIV class=postie>
<DIV>
<DIV style="FLOAT: right">第 <FONT color=#ff0000>4</FONT> 楼</DIV><A
href="https://www.alipay.com/payto:m9551@QQ.com&partner=2088002048522272"
target=_blank></A><A href="mailto:m9551@QQ.com"></A></DIV>
<DIV
style="PADDING-RIGHT: 0px; MARGIN-TOP: 10px; FONT-SIZE: 9pt; OVERFLOW-X: hidden; WIDTH: 97%; WORD-BREAK: break-all; TEXT-INDENT: 24px; LINE-HEIGHT: normal; HEIGHT: 200px; WORD-WRAP: break-word"><PRE>访问DLL中的资源<BR><BR>当应用程序使用资源时,它按以下顺序查找资源:首先查找应用程序本身,看有没有对应的资源;如果没有,查找MFC400.DLL(或MFC400D.DLL,它包含调试信息)。再查找应用程序所带的动态连接库中的资源。如果想在DLL中直接使用资源而不经过以上搜索顺序,可以使用AfxGetResouceHandle()和AfxSetResourceHandle()函数。<BR><BR>AfxGetResourceHandle()和AfxSetResouceHandle()函数分别用来保存旧的资源句柄和设置新的资源句柄。比如,要想直接从DLL中载入一个位图资源,可以这么调用:<BR><BR><P>CBitmap mybitmap;<BR><BR>HINSTANCE hInstOld=AfxGetResourceHandle()<BR><BR>AfxSetResouceHandler(extensionDLL.hModule);<BR><BR>if(!mybitmap.LoadBitmap(IDR_BITMAP));<BR><BR>{<BR><BR>//restore the old resouce chain and return error<BR><BR>AfxSetResouceHandle(hInstOld);<BR><BR>return FALSE;<BR><BR>}<BR><BR>AfxSetResouceHandle(hInstOld);<BR><BR>//use this bitmap...<BR><BR>return TRUE;<BR><BR>还可以使用FindResource()搜索资源表,寻找给定的资源。<BR><BR>HRSRC FindResource(<BR><BR>HMODULE hModule,<BR><BR> <BR><BR>LPCTSTR lpName, <BR><BR> <BR><BR>LPCTSTR lpType <BR><BR>);</P><BR><P><BR>FindResource带三个参数,第一个参数是模块句柄,第二个是要查找的资源名字,如“MYDIALOG”,第三个是资源类型,可参见Visual C++文档。如果查找成功,则返回该资源句柄。可以用LoadResouce以该句柄为参数装入资源。<BR>小 结<BR><BR>本章介绍了用户模块的创建和使用。<BR><BR>用户模块是由用户自己开发的、可以加入到最终用户应用程序中提供某一特定功能的函数和类的集合。<BR><BR>用户模块包括静态连接库和动态连接库两大类:静态连接库将函数的目标代码直接连入到应用程序中;动态连接库只是给出函数入口信息,在调用时访问DLL文件中函数的目标代码。<BR><BR>创建静态连接库:指定工程类型为Win32 Static Library,加入函数声明和定义,并编译和连接。提交函数库时只需要提供函数的lib文件和头文件。要使用静态库,可以将函数库和头文件包含在工程文件中。<BR><BR>创建动态连接库:提供函数定义、声明以及包含DLL文件函数信息的DEF文件。使用时需要将DLL文件拷贝至适当目录下。<BR><BR>两类动态连接库的创建:用户动态连接库和MFC扩展库。<BR></P></PRE></DIV></DIV></DIV></DIV></TD></TR></TBODY></TABLE><BR>
<DIV class=opt><A title=查看该分类中所有文章
href="http://hi.baidu.com/tanrongjunjun/blog/category/ĬÈÏ·ÖÀà">类别:默认分类</A> | <A
title=将此文章添加到百度搜藏 onclick="return addToFavor();"
href="http://cang.baidu.com/do/add" target=_blank>添加到搜藏</A> | 浏览(<SPAN
id=result></SPAN>) | <A
href="http://hi.baidu.com/tanrongjunjun/blog/item/d7c0925277120b0f0cf3e30e.html#send">评论</A> (0)
</DIV>
<DIV class=line></DIV>
<SCRIPT language=javascript>
/*<![CDATA[*/
var pre = [true,'用EnumThreadWindows或...', '/tanrongjunjun/blog/item/72982cdd8ae805d88d102939.html'];
var post = [true,'rm or rmvb的制作工具', '/tanrongjunjun/blog/item/0e950ef464578ced7709d750.html'];
if(pre[0] || post[0]){
document.write('<div id="in_nav">');
if(pre[0]){
document.write('上一篇:<a href="' + pre[2] + '">' + pre[1] + '</a> ');
}
if(post[0]){
document.write('下一篇:<a href="' + post[2] + '">' + post[1] + '</a>');
}
document.write('</div>');
document.write('<div class="line"> </div>');
}
/*]]>*/
</SCRIPT>
<DIV id=in_reader>
<DIV class=tit>最近读者:</DIV>
<SCRIPT>
var g_spAnnony=true;
var g_read=[
{}
];
g_read.length=g_read.length-1;
var _rh1="";
var _rh2="";
function wrreader(){
_rh1 += '<table width="100%" ><tr>';
_rh2+='<tr>';
if(g_spAnnony){
_rh1+='<td align="center" width="10%" ><img border="0" width="55" height="55" src="http://img.baidu.com/hi/img/portraitn.jpg"></td>';
_rh2+='<td> </td>';
if(g_read.length>0){
_rh1+='<td align="left" width="12%">';
}else{
_rh1+='<td align="left" width="100%">';
}
_rh1+="<a href='http://passport.baidu.com/?login&tpl=sp&tpl_reg=sp&u="+myref+"' target='_self'>登录</a>后,您就出现在这里。</td>";
_rh2+='<td> </td>'
}
if(g_read.length==0){
if(!g_spAnnony){
_rh1+='<td align=left width="100%">最近还没有登录用户看过这篇文章……</td>';
_rh2+='<td> </td>';
}
}else{
for(i=0,len=g_read.length;i<len;i++){
_rh1+='<td align="center" valign="bottom" width="10%" class="user"><a href="/'+g_read[i][0]+'" target="_blank"><img border="0" src="http://himg.baidu.com/sys/portraitn/item/'+g_read[i][1]+'.jpg"></a></td>';
_rh2+='<td align="center" valign="top" class="user"><a href="/'+g_read[i][0]+'" target="_blank">'+g_read[i][2]+'</a></td>';
}
}
_rh1+='<td width="100%"></td></tr>';
_rh2+='<td></td></tr></table>';
document.write(_rh1+_rh2);
}
wrreader();
</SCRIPT>
</DIV>
<DIV class=line></DIV>
<SCRIPT language=JavaScript>
allkey=allkey+"9f03950aee79271f95ca6b0b_d7c0925277120b0f0cf3e30e_";
</SCRIPT>
<DIV id=in_comment><A name=comment></A>
<DIV class=tit>网友评论:</DIV>
<SCRIPT>
function writecmt(type,id,cmtname,cmturl,portraitId){
var html1="";
if(type==1){
html1="<a name='"+id+"' href='"+cmturl+"' target='_blank' title='"+cmturl+"'><img border='0' src='http://himg.baidu.com/sys/portraitn/item/"+portraitId+".jpg'><br>"+cmtname+"</a>";
}else{
if(cmtname=="" || cmtname=="匿名网友"){
if(cmturl==""){
html1="<a name='"+id+"'>匿名网友</a>";
}else{
html1="<a name='"+id+"' href='"+cmturl+"' target='_blank' title='"+cmturl+"'>"+cmtname+"</a>";
}
}else{
if(cmturl==""){
html1="<div class='f14' style='display:inline'>网友:<a name='"+id+"'>"+cmtname+"</a></div>";
}else{
html1="<div class='f14' style='display:inline'>网友:<a name='"+id+"' href='"+cmturl+"' target='_blank' title='"+cmturl+"'>"+cmtname+"</a></div>";
}
}
}
document.write(html1);
}
</SCRIPT>
<DIV id=page></DIV></DIV>
<DIV id=in_send><A name=send></A>
<FORM id=popFormSubmit name=form1 onsubmit="return checkcmtform()"
action=/tanrongjunjun/commit method=post><INPUT type=hidden value=8 name=ct>
<INPUT type=hidden value=1 name=cm> <INPUT type=hidden
value=d7c0925277120b0f0cf3e30e name=spBlogID>
<SCRIPT language=JavaScript>
document.write("<input type='hidden' name='spRefURL' value='"+window.location.href+"'>");
</SCRIPT>
<DIV class=tit>发表评论:</DIV>
<TABLE cellSpacing=5 cellPadding=0 width=620 border=0>
<TBODY>
<TR>
<TD class=f14>姓 名:</TD>
<TD><INPUT id=spBlogCmtor style="WIDTH: 220px" onfocus=hidErr(1);
tabIndex=1 maxLength=49 onchange="checkname('spBlogCmtor')"
name=spBlogCmtor>
<SCRIPT>
document.write(" <a href='http://passport.baidu.com/?reg&tpl=sp&return_method=get&skip_ok=1&u=http://hi.baidu.com/sys/reg/' target='_blank'>注册</a>");
document.write(" | <a href='http://passport.baidu.com/?login&tpl=sp&tpl_reg=sp&u="+myref+"'>登录</a>");
</SCRIPT>
<DIV id=nmerror style="DISPLAY: none">*姓名最长为50字节</DIV></TD></TR>
<TR id=1_err style="DISPLAY: none">
<TD> </TD>
<TD>
<DIV class=error id=1_err_con></DIV></TD></TR>
<TR>
<TD class=f14>网址或邮箱:</TD>
<TD><INPUT id=spBlogCmtURL style="WIDTH: 360px" onfocus=hidErr(2);
tabIndex=2 maxLength=128 onchange="checkeandu('spBlogCmtURL')"
name=spBlogCmtURL> (选填)</TD>
<SCRIPT>
G("spBlogCmtor").value="";
G("spBlogCmtURL").value="";
</SCRIPT>
</TR>
<TR id=2_err style="DISPLAY: none">
<TD> </TD>
<TD>
<DIV class=error id=2_err_con></DIV></TD></TR>
<TR>
<TD class=f14 vAlign=top>内 容:</TD>
<TD><TEXTAREA id=spBlogCmtText style="WIDTH: 520px; HEIGHT: 155px" onfocus=hidErr(3); tabIndex=3 name=spBlogCmtText></TEXTAREA>
<SCRIPT>
G("spBlogCmtor").value=G("spBlogCmtor").defaultValue;
G("spBlogCmtText").value="";
</SCRIPT>
</TD></TR>
<TR id=3_err style="DISPLAY: none">
<TD> </TD>
<TD>
<DIV class=error id=3_err_con></DIV></TD></TR>
<TR id=vercode>
<TD class=f14 vAlign=top>验证码:</TD>
<TD vAlign=top><INPUT type=hidden
value=1B98E3751723A5DDB3DE7E7C3609898B84760D96780154B99007C2D52D174176EBBE05FDF95AFB27FAFEF50C50D04BB353F20A21536D355EDF08926C97BF9EF8
name=spVcode> <INPUT id=spVerifyKey tabIndex=4 maxLength=4 size=6
name=spVerifyKey autocomplete="off">请输入下图中的四位验证码,字母不区分大小写。<BR>
<SCRIPT language=JavaScript>
var imgsrc="http://post.baidu.com/cgi-bin/genimg?1B98E3751723A5DDB3DE7E7C3609898B84760D96780154B99007C2D52D174176EBBE05FDF95AFB27FAFEF50C50D04BB353F20A21536D355EDF08926C97BF9EF8";
document.write("<img id='verifypic' src='"+imgsrc+"' width='120' height='40'>");
function newverifypic(){
document.getElementById("verifypic").src = imgsrc +"&t="+ Math.random();
}
</SCRIPT>
<A title=看不清左边的字符 href="javascript:newverifypic();">看不清?</A> </TD></TR>
<TR>
<TD class=f14 vAlign=top> </TD>
<TD class=f14 vAlign=top><INPUT id=btn_ok tabIndex=5 type=submit value=发表评论 name=btn_ok></TD></TR></TBODY></TABLE></FORM></DIV><BR></DIV>
<TABLE height=8 cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=modbl width=7> </TD>
<TD class=modbc> </TD>
<TD class=modbr width=7> </TD></TR></TBODY></TABLE></DIV></DIV></DIV></DIV>
<SCRIPT language=javascript>
<!--
var hstr="/tanrongjunjun/brwstat?key1=1";
document.write("<script src='"+hstr+"&key2="+allkey+"'><\/script>");
//-->
</SCRIPT>
<BR>
<CENTER>
<DIV id=ft>©2007 Baidu</DIV></CENTER>
<SCRIPT>
if(document.getElementById("m_blog"))
{
var imgarray = document.getElementById("m_blog").getElementsByTagName('img');
var imgw = document.getElementById("m_blog").offsetWidth;
imgw =imgw-40;
for(var i=0; i<imgarray.length; i++){
if(imgarray[i].className=="blogimg" && imgarray[i].width>=imgw) imgarray[i].width=imgw;
}
}
</SCRIPT>
</CENTER><IMG style="DISPLAY: none" src=""> </BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -