﻿<?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>C++博客-书呆子 的 notepad-随笔分类-Windows编程</title><link>http://www.cppblog.com/GUO/category/13960.html</link><description>   look to the master,
    follow the master,
    walk with the master,
    see through the master,
    become the master.</description><language>zh-cn</language><lastBuildDate>Sat, 11 Sep 2010 00:23:10 GMT</lastBuildDate><pubDate>Sat, 11 Sep 2010 00:23:10 GMT</pubDate><ttl>60</ttl><item><title>[转]C++常规DLL应用方式介绍</title><link>http://www.cppblog.com/GUO/archive/2010/09/10/126305.html</link><dc:creator>书呆子</dc:creator><author>书呆子</author><pubDate>Fri, 10 Sep 2010 05:21:00 GMT</pubDate><guid>http://www.cppblog.com/GUO/archive/2010/09/10/126305.html</guid><wfw:comment>http://www.cppblog.com/GUO/comments/126305.html</wfw:comment><comments>http://www.cppblog.com/GUO/archive/2010/09/10/126305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/GUO/comments/commentRss/126305.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/GUO/services/trackbacks/126305.html</trackback:ping><description><![CDATA[原文：<a style="color: #ff0000;" target="_blank"  href="http://developer.51cto.com/art/201002/183651.htm">http://developer.51cto.com/art/201002/183651.htm
</a><br><br>
<p><a href="http://developer.51cto.com/art/200709/56340.htm">C++</a>中的DLL应用在实际编程中是非常重要的一个基础概念，掌握了这一应用对于我们程序开有着非常重要的作用。在这里我们将会针对C++常规DLL做一个详细介绍，希望能给大家带来一些帮助。</p>
<p><strong> C++常规DLL的建立与使用</strong> </p>
<p>1：导出函数</p>
<pre>
<ol class="dp-xml">
    <li class="alt">__declspec(dllexport)&nbsp;void&nbsp;ShowDlg(void) &nbsp;</li>
    <li>{ &nbsp;</li>
    <li class="alt">CDllDialog&nbsp;dllDialog; &nbsp;</li>
    <li>dllDialog.DoModal&nbsp;(); &nbsp;</li>
    <li class="alt">}&nbsp;</li>
</ol>
</pre>
<p>2：修改.def文件，加上函数名称</p>
<pre>
<ol class="dp-xml">
    <li class="alt">;&nbsp;DrawTestDll.def&nbsp;:&nbsp;Declares&nbsp;the&nbsp;module&nbsp;parameters&nbsp;for&nbsp;the&nbsp;DLL. &nbsp;</li>
    <li>&nbsp;</li>
    <li class="alt">LIBRARY&nbsp;"DrawTestDll" &nbsp;</li>
    <li>DESCRIPTION&nbsp;'DrawTestDll&nbsp;Windows&nbsp;Dynamic&nbsp;Link&nbsp;Library' &nbsp;</li>
    <li class="alt">&nbsp;</li>
    <li>EXPORTS &nbsp;</li>
    <li class="alt">;&nbsp;Explicit&nbsp;exports&nbsp;can&nbsp;go&nbsp;here&nbsp;</li>
</ol>
</pre>
<p>3：将DLL文件复制到程序所在目录</p>
<p>4：在程序里调用DLL</p>
<pre>
<ol class="dp-xml">
    <li class="alt">void&nbsp;CDllTestView::OnLButtonDown(UINT&nbsp;nFlags,&nbsp;CPoint&nbsp;point) &nbsp;</li>
    <li>{ &nbsp;</li>
    <li class="alt">typedef&nbsp;void&nbsp;(*lpFun)(void); &nbsp;</li>
    <li>HINSTANCE&nbsp;hDll;&nbsp;//DLL句柄 &nbsp;</li>
    <li class="alt">hDll&nbsp;=&nbsp;LoadLibrary("DrawTestDll.dll");&nbsp;//加载DLL资源 &nbsp;</li>
    <li>if&nbsp;(NULL==hDll)&nbsp;//寻找顺序，EXE所在目录，工程所在目录，System、windows目录 &nbsp;</li>
    <li class="alt">{ &nbsp;</li>
    <li>MessageBox("DLL加载失败"); &nbsp;</li>
    <li class="alt">} &nbsp;</li>
    <li>lpFun&nbsp;addFun;&nbsp;//函数指针 &nbsp;</li>
    <li class="alt">addFun&nbsp;=&nbsp;(lpFun)GetProcAddress(hDll,"ShowDlg");&nbsp;//得到函数ShowDlg的地址 &nbsp;</li>
    <li>if&nbsp;(NULL==addFun) &nbsp;</li>
    <li class="alt">{ &nbsp;</li>
    <li>MessageBox("DLL中函数寻找失败"); &nbsp;</li>
    <li class="alt">} &nbsp;</li>
    <li>HINSTANCE&nbsp;exe_hinstance=AfxGetResourceHandle();&nbsp;//得到主程序的实例句柄 &nbsp;</li>
    <li class="alt">AfxSetResourceHandle(hDll);&nbsp;//设置主程序的句柄为DLL实例（利用DLL里的资源） &nbsp;</li>
    <li>addFun();&nbsp;//调用函数 &nbsp;</li>
    <li class="alt">AfxSetResourceHandle(exe_hinstance);//重新设置主程序的实例句柄 &nbsp;</li>
    <li>FreeLibrary(hDll);&nbsp;//赦放DLL资源 &nbsp;</li>
    <li class="alt">}&nbsp;</li>
</ol>
</pre>
<p><strong> C++常规DLL中类的使用</strong> </p>
<p>1：DLL中添加新类</p>
<p>类的.h文件：<br>
&nbsp;</p>
<pre>
<ol class="dp-xml">
    <li class="alt">//导出一个类(包括其方法、属性) &nbsp;</li>
    <li>class&nbsp;_declspec(dllexport)&nbsp;CDllClass&nbsp;{ &nbsp;</li>
    <li class="alt">public: &nbsp;</li>
    <li>CDllClass(void); &nbsp;</li>
    <li class="alt">void&nbsp;MSG(const&nbsp;char&nbsp;*&nbsp;const&nbsp;str); &nbsp;</li>
    <li>};&nbsp;</li>
</ol>
</pre>
<p>类的.cpp文件：</p>
<pre>
<ol class="dp-xml">
    <li class="alt">#include&nbsp;"stdafx.h" &nbsp;</li>
    <li>#include&nbsp;"DllClass.h" &nbsp;</li>
    <li class="alt">&nbsp;</li>
    <li>CDllClass::CDllClass() &nbsp;</li>
    <li class="alt">{ &nbsp;</li>
    <li>return; &nbsp;</li>
    <li class="alt">} &nbsp;</li>
    <li>void&nbsp;CDllClass::MSG(const&nbsp;char&nbsp;*&nbsp;const&nbsp;str) &nbsp;</li>
    <li class="alt">{ &nbsp;</li>
    <li>MessageBox(NULL,str,"",MB_OK); &nbsp;</li>
    <li class="alt">}&nbsp;</li>
</ol>
</pre>
<p>2：将编译好的DLL文件、Lib文件和类的头文件复制到工程目录</p>
<p>3：修改类的头文件（将dll的头文件中为 dllexport,在应用文件中为dllimport）</p>
<pre>
<ol class="dp-xml">
    <li class="alt">//导入一个类(包括其方法、属性) &nbsp;</li>
    <li>class&nbsp;_declspec(dllimport)&nbsp;CDllClass&nbsp;{ &nbsp;</li>
    <li class="alt">public: &nbsp;</li>
    <li>CDllClass(void); &nbsp;</li>
    <li class="alt">void&nbsp;MSG(const&nbsp;char&nbsp;*&nbsp;const&nbsp;str); &nbsp;</li>
    <li>};&nbsp;</li>
</ol>
</pre>
<p>4：在调用类的实现函数的文件里加上类的头文件和Lib文件的引用</p>
<pre>
<ol class="dp-xml">
    <li class="alt">#include&nbsp;"DllClass.h"&nbsp;//头文件的引入，是程序可以定义类的对象 &nbsp;</li>
    <li>#pragma&nbsp;comment(lib,"DrawDll.lib")&nbsp;//具体函数的定义&nbsp;</li>
</ol>
</pre>
<p>正常使用即可。以上就是对C++常规DLL的相关介绍。</p>
<br><br><img src ="http://www.cppblog.com/GUO/aggbug/126305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/GUO/" target="_blank">书呆子</a> 2010-09-10 13:21 <a href="http://www.cppblog.com/GUO/archive/2010/09/10/126305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>注册表</title><link>http://www.cppblog.com/GUO/archive/2010/06/01/116911.html</link><dc:creator>书呆子</dc:creator><author>书呆子</author><pubDate>Tue, 01 Jun 2010 09:03:00 GMT</pubDate><guid>http://www.cppblog.com/GUO/archive/2010/06/01/116911.html</guid><wfw:comment>http://www.cppblog.com/GUO/comments/116911.html</wfw:comment><comments>http://www.cppblog.com/GUO/archive/2010/06/01/116911.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/GUO/comments/commentRss/116911.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/GUO/services/trackbacks/116911.html</trackback:ping><description><![CDATA[利用Win32API函数操作注册表：<br><br>MFC对话框工程：SoftReg，将应用软件的使用次数写入注册表。<br>在OnInitDialog函数中添加：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><img id="Codehighlighter1_0_73_Open_Image" onclick="this.style.display='none'; codehighlighter1_0_73_open_text.style.display="'none';" codehighlighter1_0_73_closed_image.style.display="'inline';" codehighlighter1_0_73_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_0_73_Closed_Image" onclick="this.style.display='none'; codehighlighter1_0_73_closed_text.style.display="'none';" codehighlighter1_0_73_open_image.style.display="'inline';" codehighlighter1_0_73_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_0_73_Closed_Text">/**/</span><span id="Codehighlighter1_0_73_Open_Text"><span style="color: #008000;">/*</span><span style="color: #008000;">**********************************************************************</span><span style="color: #008000;">*/</span></span><span style="color: #000000;"><br><img id="Codehighlighter1_76_221_Open_Image" onclick="this.style.display='none'; codehighlighter1_76_221_open_text.style.display="'none';" codehighlighter1_76_221_closed_image.style.display="'inline';" codehighlighter1_76_221_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_76_221_Closed_Image" onclick="this.style.display='none'; codehighlighter1_76_221_closed_text.style.display="'none';" codehighlighter1_76_221_open_image.style.display="'inline';" codehighlighter1_76_221_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_76_221_Closed_Text">/**/</span><span id="Codehighlighter1_76_221_Open_Text"><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;RegOpenKey(HKEY&nbsp;hKey,LPCTSRT&nbsp;lpSubKey,PHKEY&nbsp;phkResult)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;打开注册表中指定的项或子项,hKey：根键，lpSubKey：将要打开的子项名称，<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phkResult:返回打开的子项。如果成功，返回ERROR_SUCCESS<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span></span><span style="color: #000000;"><br><img id="Codehighlighter1_224_297_Open_Image" onclick="this.style.display='none'; codehighlighter1_224_297_open_text.style.display="'none';" codehighlighter1_224_297_closed_image.style.display="'inline';" codehighlighter1_224_297_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_224_297_Closed_Image" onclick="this.style.display='none'; codehighlighter1_224_297_closed_text.style.display="'none';" codehighlighter1_224_297_open_image.style.display="'inline';" codehighlighter1_224_297_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_224_297_Closed_Text">/**/</span><span id="Codehighlighter1_224_297_Open_Text"><span style="color: #008000;">/*</span><span style="color: #008000;">**********************************************************************</span><span style="color: #008000;">*/</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;HKEY&nbsp;Key;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;sKeyPath;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;sKeyPath&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Software\\jerry</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(RegOpenKey(HKEY_CURRENT_USER,sKeyPath,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">Key)</span><span style="color: #000000;">!=</span><span style="color: #000000;">0</span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;RegOpenKey(HKEY_CURRENT_USER,sKeyPath,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">Key)</span><span style="color: #000000;">!=</span><span style="color: #000000;">ERROR_SUCCESS)<br><img id="Codehighlighter1_481_696_Open_Image" onclick="this.style.display='none'; codehighlighter1_481_696_open_text.style.display="'none';" codehighlighter1_481_696_closed_image.style.display="'inline';" codehighlighter1_481_696_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_481_696_Closed_Image" onclick="this.style.display='none'; codehighlighter1_481_696_closed_text.style.display="'none';" codehighlighter1_481_696_open_image.style.display="'inline';" codehighlighter1_481_696_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_481_696_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_481_696_Open_Text"><span style="color: #000000;">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::RegCreateKey(HKEY_CURRENT_USER,sKeyPath,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">Key);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::RegSetValueEx(Key,</span><span style="color: #000000;">"</span><span style="color: #000000;">TryTime</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">0</span><span style="color: #000000;">,REG_SZ,(unsigned&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">)</span><span style="color: #000000;">"</span><span style="color: #000000;">5</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">2</span><span style="color: #000000;">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::RegCloseKey(Key);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="color: #000000;">"</span><span style="color: #000000;">You&nbsp;can&nbsp;try&nbsp;this&nbsp;5&nbsp;times!</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">tip</span><span style="color: #000000;">"</span><span style="color: #000000;">,MB_OK</span><span style="color: #000000;">|</span><span style="color: #000000;">MB_ICONEXCLAMATION);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br><img id="Codehighlighter1_706_1288_Open_Image" onclick="this.style.display='none'; codehighlighter1_706_1288_open_text.style.display="'none';" codehighlighter1_706_1288_closed_image.style.display="'inline';" codehighlighter1_706_1288_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_706_1288_Closed_Image" onclick="this.style.display='none'; codehighlighter1_706_1288_closed_text.style.display="'none';" codehighlighter1_706_1288_open_image.style.display="'inline';" codehighlighter1_706_1288_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_706_1288_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_706_1288_Open_Text"><span style="color: #000000;">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;sKeyTime;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nTryTime;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPBYTE&nbsp;Data</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;BYTE[</span><span style="color: #000000;">80</span><span style="color: #000000;">];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;TYPE</span><span style="color: #000000;">=</span><span style="color: #000000;">REG_SZ;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;cbData</span><span style="color: #000000;">=</span><span style="color: #000000;">80</span><span style="color: #000000;">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::RegQueryValueEx(Key,</span><span style="color: #000000;">"</span><span style="color: #000000;">TryTime</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">TYPE,Data,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">cbData);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sKeyTime.Format(</span><span style="color: #000000;">"</span><span style="color: #000000;">%s</span><span style="color: #000000;">"</span><span style="color: #000000;">,Data);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nTryTime</span><span style="color: #000000;">=</span><span style="color: #000000;">atoi(sKeyTime);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nTryTime&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br><img id="Codehighlighter1_949_1027_Open_Image" onclick="this.style.display='none'; codehighlighter1_949_1027_open_text.style.display="'none';" codehighlighter1_949_1027_closed_image.style.display="'inline';" codehighlighter1_949_1027_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_949_1027_Closed_Image" onclick="this.style.display='none'; codehighlighter1_949_1027_closed_text.style.display="'none';" codehighlighter1_949_1027_open_image.style.display="'inline';" codehighlighter1_949_1027_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_949_1027_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_949_1027_Open_Text"><span style="color: #000000;">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="color: #000000;">"</span><span style="color: #000000;">Please&nbsp;regist!</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">tip</span><span style="color: #000000;">"</span><span style="color: #000000;">,MB_OK</span><span style="color: #000000;">|</span><span style="color: #000000;">MB_ICONSTOP);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;FALSE;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nTryTime</span><span style="color: #000000;">--</span><span style="color: #000000;">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sKeyTime.Format(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,nTryTime);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::RegSetValueEx(Key,</span><span style="color: #000000;">"</span><span style="color: #000000;">TryTime</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">0</span><span style="color: #000000;">,REG_SZ,(unsigned&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">)sKeyTime.GetBuffer(sKeyTime.GetLength()),</span><span style="color: #000000;">2</span><span style="color: #000000;">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::RegCloseKey(Key);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="color: #000000;">"</span><span style="color: #000000;">You&nbsp;can&nbsp;try&nbsp;this&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">sKeyTime</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;times!</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;tip</span><span style="color: #000000;">"</span><span style="color: #000000;">,MB_OK</span><span style="color: #000000;">|</span><span style="color: #000000;">MB_ICONEXCLAMATION);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div><img src ="http://www.cppblog.com/GUO/aggbug/116911.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/GUO/" target="_blank">书呆子</a> 2010-06-01 17:03 <a href="http://www.cppblog.com/GUO/archive/2010/06/01/116911.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DLL动态链接库</title><link>http://www.cppblog.com/GUO/archive/2010/06/01/116871.html</link><dc:creator>书呆子</dc:creator><author>书呆子</author><pubDate>Tue, 01 Jun 2010 03:22:00 GMT</pubDate><guid>http://www.cppblog.com/GUO/archive/2010/06/01/116871.html</guid><wfw:comment>http://www.cppblog.com/GUO/comments/116871.html</wfw:comment><comments>http://www.cppblog.com/GUO/archive/2010/06/01/116871.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/GUO/comments/commentRss/116871.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/GUO/services/trackbacks/116871.html</trackback:ping><description><![CDATA[一、创建MFC动态链接库<br>创建一个MFC规则动态链接库（MFCDLL）<br>在MFCDLL.CPP末尾处加入实现代码：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;sum(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b)<br><img id="Codehighlighter1_21_36_Open_Image" onclick="this.style.display='none'; codehighlighter1_21_36_open_text.style.display="'none';" codehighlighter1_21_36_closed_image.style.display="'inline';" codehighlighter1_21_36_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_21_36_Closed_Image" onclick="this.style.display='none'; codehighlighter1_21_36_closed_text.style.display="'none';" codehighlighter1_21_36_open_image.style.display="'inline';" codehighlighter1_21_36_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_21_36_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_21_36_Open_Text"><span style="color: #000000;">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a</span><span style="color: #000000;">+</span><span style="color: #000000;">b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;sub(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b)<br><img id="Codehighlighter1_59_74_Open_Image" onclick="this.style.display='none'; codehighlighter1_59_74_open_text.style.display="'none';" codehighlighter1_59_74_closed_image.style.display="'inline';" codehighlighter1_59_74_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_59_74_Closed_Image" onclick="this.style.display='none'; codehighlighter1_59_74_closed_text.style.display="'none';" codehighlighter1_59_74_open_image.style.display="'inline';" codehighlighter1_59_74_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_59_74_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_59_74_Open_Text"><span style="color: #000000;">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a</span><span style="color: #000000;">-</span><span style="color: #000000;">b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;mul(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b)<br><img id="Codehighlighter1_97_112_Open_Image" onclick="this.style.display='none'; codehighlighter1_97_112_open_text.style.display="'none';" codehighlighter1_97_112_closed_image.style.display="'inline';" codehighlighter1_97_112_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_97_112_Closed_Image" onclick="this.style.display='none'; codehighlighter1_97_112_closed_text.style.display="'none';" codehighlighter1_97_112_open_image.style.display="'inline';" codehighlighter1_97_112_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_97_112_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_97_112_Open_Text"><span style="color: #000000;">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a</span><span style="color: #000000;">*</span><span style="color: #000000;">b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;pdiv(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b)<br><img id="Codehighlighter1_136_151_Open_Image" onclick="this.style.display='none'; codehighlighter1_136_151_open_text.style.display="'none';" codehighlighter1_136_151_closed_image.style.display="'inline';" codehighlighter1_136_151_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_136_151_Closed_Image" onclick="this.style.display='none'; codehighlighter1_136_151_closed_text.style.display="'none';" codehighlighter1_136_151_open_image.style.display="'inline';" codehighlighter1_136_151_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_136_151_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_136_151_Open_Text"><span style="color: #000000;">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a</span><span style="color: #000000;">/</span><span style="color: #000000;">b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Message()<br><img id="Codehighlighter1_168_206_Open_Image" onclick="this.style.display='none'; codehighlighter1_168_206_open_text.style.display="'none';" codehighlighter1_168_206_closed_image.style.display="'inline';" codehighlighter1_168_206_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_168_206_Closed_Image" onclick="this.style.display='none'; codehighlighter1_168_206_closed_text.style.display="'none';" codehighlighter1_168_206_open_image.style.display="'inline';" codehighlighter1_168_206_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_168_206_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_168_206_Open_Text"><span style="color: #000000;">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox(</span><span style="color: #000000;">"</span><span style="color: #000000;">message&nbsp;from&nbsp;dll</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span></div>
把函数声明写在.def模块定义文件中，编译器根据这个文件的函数声明来生成LIB文件，如果将函数声明写入头文件中，编译器编译程序时还是以.def中的声明为主。<br>把函数声明放在EXPORTS语句下面：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><img id="Code_Closed_Image_104312" onclick="this.style.display='none'; code_closed_text_104312.style.display="'none';" code_open_image_104312.style.display="'inline';" code_open_text_104312.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" height="16" width="11"><img style="display: none;" id="Code_Open_Image_104312" onclick="this.style.display='none'; code_open_text_104312.style.display="'none';" code_closed_image_104312.style.display="'inline';" code_closed_text_104312.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" height="16" width="11"><span style="border: 1px solid #808080; background-color: #ffffff;" id="Code_Closed_Text_104312">MFCDLL.def</span><span style="display: none;" id="Code_Open_Text_104312"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><span style="color: #000000;">;&nbsp;MFCDLL.def&nbsp;:&nbsp;Declares&nbsp;the&nbsp;module&nbsp;parameters&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;the&nbsp;DLL.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">LIBRARY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">MFCDLL</span><span style="color: #000000;">"</span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">DESCRIPTION&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">MFCDLL&nbsp;Windows&nbsp;Dynamic&nbsp;Link&nbsp;Library</span><span style="color: #000000;">'</span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">EXPORTS<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Explicit&nbsp;exports&nbsp;can&nbsp;go&nbsp;here<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;@</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;@</span><span style="color: #000000;">2</span><span style="color: #000000;">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;mul&nbsp;@</span><span style="color: #000000;">3</span><span style="color: #000000;">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;pdiv&nbsp;@</span><span style="color: #000000;">4</span><span style="color: #000000;">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;Message&nbsp;@</span><span style="color: #000000;">5</span><span style="color: #000000;">;</span></span></div>
<a>//@1</a>表示函数的序号<br><br>完成上述两步，通过编译就生成DLL了。生成了MFCDLL.DLL和MFCDLL.LIB两个文件。<br><br>最后，写个简单的测试程序：<br>新建一个MFC对话框工程，命名为test，复制MFCDLL.DLL到测试程序所在目录，用隐式连接来调用DLL中的函数，在实现文件testDlg.cpp的预处理中添加如下代码：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><span style="color: #000000;">#pragma&nbsp;comment(lib,</span><span style="color: #000000;">"</span><span style="color: #000000;">MFCDLL</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;sum(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;sub(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;mul(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;pdiv(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Message();</span></div>
最后将MFCDLL.lib文件也复制进测试程序所在目录，或者在测试程序Project/Setting,Link中将.lib模块的地址写进去，否则链接的时候会提示无法打开MFCDLL.lib文件。<br><br>二、创建Win32静态链接库(Win32Static)<br>向工程中添加实现文件 Win32DLL.cpp：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><img id="Code_Closed_Image_110825" onclick="this.style.display='none'; code_closed_text_110825.style.display="'none';" code_open_image_110825.style.display="'inline';" code_open_text_110825.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" height="16" width="11"><img style="display: none;" id="Code_Open_Image_110825" onclick="this.style.display='none'; code_open_text_110825.style.display="'none';" code_closed_image_110825.style.display="'inline';" code_closed_text_110825.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" height="16" width="11"><span style="border: 1px solid #808080; background-color: #ffffff;" id="Code_Closed_Text_110825">Win32DLL.cpp</span><span style="display: none;" id="Code_Open_Text_110825"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><span style="color: #000000;">#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><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">#include&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Win32DLL.h</span><span style="color: #000000;">"</span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;sum(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b)<br><img id="Codehighlighter1_65_80_Open_Image" onclick="this.style.display='none'; codehighlighter1_65_80_open_text.style.display="'none';" codehighlighter1_65_80_closed_image.style.display="'inline';" codehighlighter1_65_80_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_65_80_Closed_Image" onclick="this.style.display='none'; codehighlighter1_65_80_closed_text.style.display="'none';" codehighlighter1_65_80_open_image.style.display="'inline';" codehighlighter1_65_80_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_65_80_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_65_80_Open_Text"><span style="color: #000000;">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a</span><span style="color: #000000;">+</span><span style="color: #000000;">b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;sub(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b)<br><img id="Codehighlighter1_103_118_Open_Image" onclick="this.style.display='none'; codehighlighter1_103_118_open_text.style.display="'none';" codehighlighter1_103_118_closed_image.style.display="'inline';" codehighlighter1_103_118_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_103_118_Closed_Image" onclick="this.style.display='none'; codehighlighter1_103_118_closed_text.style.display="'none';" codehighlighter1_103_118_open_image.style.display="'inline';" codehighlighter1_103_118_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_103_118_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_103_118_Open_Text"><span style="color: #000000;">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a</span><span style="color: #000000;">-</span><span style="color: #000000;">b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;mul(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b)<br><img id="Codehighlighter1_141_156_Open_Image" onclick="this.style.display='none'; codehighlighter1_141_156_open_text.style.display="'none';" codehighlighter1_141_156_closed_image.style.display="'inline';" codehighlighter1_141_156_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_141_156_Closed_Image" onclick="this.style.display='none'; codehighlighter1_141_156_closed_text.style.display="'none';" codehighlighter1_141_156_open_image.style.display="'inline';" codehighlighter1_141_156_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_141_156_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_141_156_Open_Text"><span style="color: #000000;">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a</span><span style="color: #000000;">*</span><span style="color: #000000;">b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;pdiv(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b)<br><img id="Codehighlighter1_180_195_Open_Image" onclick="this.style.display='none'; codehighlighter1_180_195_open_text.style.display="'none';" codehighlighter1_180_195_closed_image.style.display="'inline';" codehighlighter1_180_195_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_180_195_Closed_Image" onclick="this.style.display='none'; codehighlighter1_180_195_closed_text.style.display="'none';" codehighlighter1_180_195_open_image.style.display="'inline';" codehighlighter1_180_195_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_180_195_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_180_195_Open_Text"><span style="color: #000000;">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a</span><span style="color: #000000;">/</span><span style="color: #000000;">b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Message()<br><img id="Codehighlighter1_212_271_Open_Image" onclick="this.style.display='none'; codehighlighter1_212_271_open_text.style.display="'none';" codehighlighter1_212_271_closed_image.style.display="'inline';" codehighlighter1_212_271_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_212_271_Closed_Image" onclick="this.style.display='none'; codehighlighter1_212_271_closed_text.style.display="'none';" codehighlighter1_212_271_open_image.style.display="'inline';" codehighlighter1_212_271_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_212_271_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_212_271_Open_Text"><span style="color: #000000;">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL,</span><span style="color: #000000;">"</span><span style="color: #000000;">message&nbsp;from&nbsp;static&nbsp;dll</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">DLL</span><span style="color: #000000;">"</span><span style="color: #000000;">,MB_OK);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span></span></div>
<br>用Win32 Static Library 方式创建静态链接库不用.def文件，但是需要头文件，向工程添加Win32Dll.h：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><img id="Code_Closed_Image_110958" onclick="this.style.display='none'; code_closed_text_110958.style.display="'none';" code_open_image_110958.style.display="'inline';" code_open_text_110958.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" height="16" width="11"><img style="display: none;" id="Code_Open_Image_110958" onclick="this.style.display='none'; code_open_text_110958.style.display="'none';" code_closed_image_110958.style.display="'inline';" code_closed_text_110958.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" height="16" width="11"><span style="border: 1px solid #808080; background-color: #ffffff;" id="Code_Closed_Text_110958">Win32Dll.h</span><span style="display: none;" id="Code_Open_Text_110958"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><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;">int</span><span style="color: #000000;">&nbsp;sum(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></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;">int</span><span style="color: #000000;">&nbsp;sub(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></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;">int</span><span style="color: #000000;">&nbsp;mul(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></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;">int</span><span style="color: #000000;">&nbsp;pdiv(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></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;Message();</span></span></div>
<br>用Win32创建的静态链接库只生成一个.lib文件，所以在链接时只能用隐式链接来调用，调用的时候在测试程序实现文件testDlg.cpp中加入下面代码：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Win32Dll.h</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">包含静态链接库的头文件</span><span style="color: #008000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #000000;">#pragma&nbsp;comment(lib,</span><span style="color: #000000;">"</span><span style="color: #000000;">Win32Static</span><span style="color: #000000;">"</span><span style="color: #000000;">)&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">隐式调用库文件</span></div>
<br>三、创建Win32动态链接库（Win32Dynic）<br>在Win32Dynic.cpp中添加实现函数<br>在Win32Dynic.h中添加函数声明<br>经过编译生成DLL文件和LIB文件。<img src ="http://www.cppblog.com/GUO/aggbug/116871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/GUO/" target="_blank">书呆子</a> 2010-06-01 11:22 <a href="http://www.cppblog.com/GUO/archive/2010/06/01/116871.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>