﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Aoogoo-随笔分类-C++</title><link>http://www.blogjava.net/Aoogoo/category/43526.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 12 Jan 2010 09:13:38 GMT</lastBuildDate><pubDate>Tue, 12 Jan 2010 09:13:38 GMT</pubDate><ttl>60</ttl><item><title>两个.exe含有相同的名称的dll, 到底加载几次？</title><link>http://www.blogjava.net/Aoogoo/archive/2010/01/12/309147.html</link><dc:creator>奥古虫</dc:creator><author>奥古虫</author><pubDate>Tue, 12 Jan 2010 06:15:00 GMT</pubDate><guid>http://www.blogjava.net/Aoogoo/archive/2010/01/12/309147.html</guid><wfw:comment>http://www.blogjava.net/Aoogoo/comments/309147.html</wfw:comment><comments>http://www.blogjava.net/Aoogoo/archive/2010/01/12/309147.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Aoogoo/comments/commentRss/309147.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Aoogoo/services/trackbacks/309147.html</trackback:ping><description><![CDATA[在CodeGuru上看到一个有意思的提问：<br />
两个Application: appOne.exe和appTwo.exe。如果两个Application要使用Windows系统提供的dll文件，<br />
只要加载一次就够了。但是如果它们各自都有一个<strong>&#8220;名字相同&#8221;</strong>的dll文件，比如commom.dll。<br />
应该加载几次呢？<br />
我请教了一个Senior的同事，他说加载一次就够了。我追问，如果这两个dll功能不一样怎么办？他就<br />
不屑回答了。好吧，我只能做个试验。<br />
<br />
1. 开发两个名字相同的dll,就叫commom.dll.dll就保留一个方法print出来。其中一个由appOne.exe调用，<br />
打印"This is app1.exe"；另外一个由appTwo.exe调用，打印"This is app2.exe"。<br />
这里只贴出其中一个的代码：<br />
common.h<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">#pragma&nbsp;once<br />
<br />
#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">iostream</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdio.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">windows.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br />
<br />
</span><span style="color: #0000ff;">extern</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">C</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;__declspec(dllexport)&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;print();</span></div>
common.cpp<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">common.h</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #0000ff;">extern</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">C</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;__declspec(dllexport)<br />
</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;print(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">This&nbsp;is&nbsp;app1.exe</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br />
}<br />
</span></div>
<br />
2. 开发两个Application: appOne.exe, appTwo.exe。它们分别调用前面common.dll中的print方法。<br />
为了保证它们在某个时段都运行在内存中，我们在调用完之后让其睡眠1分钟。<br />
Main.cpp<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">common.h</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
#pragma&nbsp;comment(lib,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">C:\\Users\\binwang.ASIAPACIFIC\\Documents\\Visual&nbsp;Studio&nbsp;2008\\Projects\\common\\Debug\\common.lib</span><span style="color: #000000;">"</span><span style="color: #000000;">)&nbsp;<br />
<br />
</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;print();<br />
&nbsp;&nbsp;&nbsp;&nbsp;::Sleep(</span><span style="color: #000000;">1000</span><span style="color: #000000;">*</span><span style="color: #000000;">60</span><span style="color: #000000;">);<br />
}</span></div>
<br />
3. 分别运行appOne.exe和appTwo.exe<br />
看到没有，它们分别调用自己的dll。<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/aoogoo/TwoDll.png" /><br />
<br />
<br />
<img src ="http://www.blogjava.net/Aoogoo/aggbug/309147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Aoogoo/" target="_blank">奥古虫</a> 2010-01-12 14:15 <a href="http://www.blogjava.net/Aoogoo/archive/2010/01/12/309147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>