﻿<?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++博客-快乐编程</title><link>http://www.cppblog.com/XiaoMeiAQing/</link><description>挺希望自己是个潇洒的人，可以很理智地处理身边的事情，纵然不能随心所欲，也可以笑得毫无顾忌......</description><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 23:08:33 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 23:08:33 GMT</pubDate><ttl>60</ttl><item><title>关于PostMessage,SendMessage,SendNotifyMessage三个函数的探讨</title><link>http://www.cppblog.com/XiaoMeiAQing/archive/2010/08/06/122406.html</link><dc:creator>小妹阿青</dc:creator><author>小妹阿青</author><pubDate>Fri, 06 Aug 2010 02:13:00 GMT</pubDate><guid>http://www.cppblog.com/XiaoMeiAQing/archive/2010/08/06/122406.html</guid><wfw:comment>http://www.cppblog.com/XiaoMeiAQing/comments/122406.html</wfw:comment><comments>http://www.cppblog.com/XiaoMeiAQing/archive/2010/08/06/122406.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/XiaoMeiAQing/comments/commentRss/122406.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/XiaoMeiAQing/services/trackbacks/122406.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: PostMessage,SendMessage,SendNotifyMessage这三个函数是由windows操作系统提供的用来在窗口之间传递消息的API函数，三个函数的功能描述如下。PostMessage函数功能：该函数将一个消息放入（寄送）到与指定窗口创建的线程相联系消息队列里，不等待线程处理消息就返回，是异步消息模式。消息队列里的消息通过调用GetMessage和PeekMessage取得。...&nbsp;&nbsp;<a href='http://www.cppblog.com/XiaoMeiAQing/archive/2010/08/06/122406.html'>阅读全文</a><img src ="http://www.cppblog.com/XiaoMeiAQing/aggbug/122406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/XiaoMeiAQing/" target="_blank">小妹阿青</a> 2010-08-06 10:13 <a href="http://www.cppblog.com/XiaoMeiAQing/archive/2010/08/06/122406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DLL的开发与调用（二）——创建导出类的Win32 DLL</title><link>http://www.cppblog.com/XiaoMeiAQing/archive/2009/10/01/97698.html</link><dc:creator>小妹阿青</dc:creator><author>小妹阿青</author><pubDate>Thu, 01 Oct 2009 10:39:00 GMT</pubDate><guid>http://www.cppblog.com/XiaoMeiAQing/archive/2009/10/01/97698.html</guid><wfw:comment>http://www.cppblog.com/XiaoMeiAQing/comments/97698.html</wfw:comment><comments>http://www.cppblog.com/XiaoMeiAQing/archive/2009/10/01/97698.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/XiaoMeiAQing/comments/commentRss/97698.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/XiaoMeiAQing/services/trackbacks/97698.html</trackback:ping><description><![CDATA[<p><strong>创建导出类的Win32 DLL<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong>DLL的开发与调用（一）介绍了导出函数Win32DLL的创建过程，这也是最常用的DLL。同样，在DLL中定义的类也可以被应用程序的进程访问。下面仍以实现显示Hello,World!和求和为例介绍。<br>1、创建一个名为SayHello的Win32 DLL的空项目。<br>2、选择&#8220;插入|类&#8221;，在弹出的新建类窗口中为工程创建类CSayHello。在类的头文件SayHello.h中，使用关键字_declspec(dllexport)声明导出类，并定义相关的成员变量和成员函数。代码如下：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;SayHello.h<br></span><span style="COLOR: #008000">//<br></span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;_declspec(dllexport)&nbsp;CSayHello&nbsp;&nbsp;<br>{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;CSayHello();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">CSayHello();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Say(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;szWords,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nLen);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;Sum();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;SetNum(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;fNum1,</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;fNum2);<br></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;fNo1;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;fNo2;<br><br>};</span></div>
<p>在类的实现文件中实现各成员函数，代码如下：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">SayHello.cpp<br></span><span style="COLOR: #008000">//<br></span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SayHello.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><br>CSayHello::CSayHello()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;fNo1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">fNo2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">;<br>}<br><br>CSayHello::</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">CSayHello()<br>{<br><br>}<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CSayHello::Say(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;szWords,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nLen)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(szWords,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello,World!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;strcat(szWords,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>}<br><br></span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;CSayHello::Sum()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;fNo1</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">fNo2;<br>}<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CSayHello::SetNum(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;fNum1,</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;fNum2)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;fNo1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">fNum1;<br>&nbsp;&nbsp;&nbsp;&nbsp;fNo2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">fNum2;<br>}</span></div>
<p>编译工程，在Debug文件夹下生成DLL文件SayHello.dll和导入库文件SayHello.lib。如果采用.def文件导出类，就得将类的所有函数或变量均导出。<br>3、调用DLL。在窗口类头文件中加载DLL中的导入库文件，包含SayHello.h头文件，并的声明CSayHello类对象。代码如下：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SayHello.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>#pragma&nbsp;comment(lib,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SayHello.lib</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;<br><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CTestDlg&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;CDialog<br>{<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Construction</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;CTestDlg(CWnd</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pParent&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;standard&nbsp;constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CSayHello&nbsp;MySayHello;<br><img src="http://www.cppblog.com/Images/dot.gif"></span></div>
<p>此时，就可使用类对象的成员函数了。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 调用DLL中的导出类与调用DLL中的导出函数最大区别就是应用程序中需包含导出类的头文件。因此，需要将SayHello.h、SayHello.dll和SayHello.lib拷贝到调用者工程的根目录下，才能正确运行。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 调用导出类的DLL一般都采用加载时链接的方式。虽然也可以在运行时链接，但实现起来会很麻烦，需要从DLL中读取每一个成员函数的地址，而且通常这些函数的名字是预编译的符号，可能还要在DLL里给函数重新命名。</p>
<img src ="http://www.cppblog.com/XiaoMeiAQing/aggbug/97698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/XiaoMeiAQing/" target="_blank">小妹阿青</a> 2009-10-01 18:39 <a href="http://www.cppblog.com/XiaoMeiAQing/archive/2009/10/01/97698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DLL的开发与调用（一）——创建导出函数的Win32 DLL</title><link>http://www.cppblog.com/XiaoMeiAQing/archive/2009/10/01/97697.html</link><dc:creator>小妹阿青</dc:creator><author>小妹阿青</author><pubDate>Thu, 01 Oct 2009 10:39:00 GMT</pubDate><guid>http://www.cppblog.com/XiaoMeiAQing/archive/2009/10/01/97697.html</guid><wfw:comment>http://www.cppblog.com/XiaoMeiAQing/comments/97697.html</wfw:comment><comments>http://www.cppblog.com/XiaoMeiAQing/archive/2009/10/01/97697.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/XiaoMeiAQing/comments/commentRss/97697.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/XiaoMeiAQing/services/trackbacks/97697.html</trackback:ping><description><![CDATA[<p><strong>Visual C++6.0 中可实现的DLL<br><br></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Visual C++6.0 支持自动生成Win32 DLL和MFC AppWizard DLL两种，其中Win32 DLL不使用MFC类库，其导出的函数是标准的C接口，能够被非MFC和MFC的应用程序调用，应用范围更广泛。所以下面就介绍Win32 DLL的开发。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>创建导出函数的Win32 DLL</strong><br>1、启动Visual C++6.0，利用AppWizard创建一个&#8220;Win32 Dynamic-Link Library&#8221;类型的工程，工程名为SayHello。采用默认设置，即创建一个Win32 DLL的空项目。<br>2、为DLL工程添加头文件SayHello.h和源文件SayHello.cpp。在头文件SayHello.h中，声明DLL的导出函数Say和Sum，分别用来显示"Hello,World!"和求和。声明代码如下：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">SayHello.h<br></span><span style="COLOR: #008000">//<br></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>extern&nbsp;"C"修饰词的作用是使C++编译器以C语言的方式对这个函数进行处理，以便供其他语言所用。<br></span><span style="COLOR: #008000">*/</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;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;_declspec(dllexport)Say(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;szWords,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nLen);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">声明Say导出函数</span><span style="COLOR: #008000"><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;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;_declspec(dllexport)Sum(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;fNum1,</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;fNum2);&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">声明Sum导出函数</span></div>
<p>在源文件SayHello.cpp中添加函数Say和Sum的实现代码，代码如下：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">SayHello.cpp<br></span><span style="COLOR: #008000">//<br></span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SayHello.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Say(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;szWords,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nLen)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(szWords,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello,World!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;strcat(szWords,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>}<br><br></span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;Sum(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;fNum1,</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;fNum2)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;fNum1</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">fNum2;<br>}</span></div>
<p>3、【F7】键编译生成DLL。此时在工程的Debug文件夹下生成实际代码文件SayHello.dll和导入库文件SayHello.lib。<br>4、从DLL中导出函数有两种方法，一种是使用_declspec(dllexport)关键字，如SayHello.h中所示；一种是添加.def文件（值得注意的是，添加的文件类型是文本文件，且名称应输入SayHello.def），代码如下：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">;SayHello.def<br>;<br><br>LIBRARY&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SayHello</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>DESCRIPTION&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">导出DLL中的函数</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>EXPORTS<br>&nbsp;&nbsp;&nbsp;&nbsp;Say&nbsp;&nbsp;@</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;Sum&nbsp;&nbsp;@</span><span style="COLOR: #000000">2</span></div>
<p>5、加载DLL分为静态加载和动态加载。动态加载(运行时动态链接，也叫显示链接)DLL是通过LoadLibrary、GetProcAddress和FreeLibrary这3个API函数进行的。调用如下：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">typedef&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">SAY)(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">);<br>SAY&nbsp;Say;<br>typedef&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">SUM)(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">);<br>SUM&nbsp;Sum;<br>HINSTANCE&nbsp;hdll;<br>hdll</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">LoadLibrary(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">..\\..\\SayHello\\Debug\\SayHello.dll</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(hdll</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">NULL)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">GetProcAddress函数获得获得获得DLL导出函数地址</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Say</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(SAY)GetProcAddress(hdll,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Say</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;Sum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(SUM)GetProcAddress(hdll,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Sum</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>}<br></span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">无法加载DLL!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br>}<br>UpdateData(TRUE);<br></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Len</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;p[Len];<br>Say(p,Len);<br>m_strDispHello.Format(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,p);<br>m_fResult</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Sum(m_fNum1,m_fNum2);<br>UpdateData(FALSE);<br>FreeLibrary(hdll);</span></div>
静态加载（加载时动态链接，也叫隐式链接）DLL是由编译系统完成对DLL的加载和应用程序结束时对DLL的卸载，需要将DLL的引用库文件（.lib）与应用程序进行静态链接。调用如下：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#pragma&nbsp;comment(lib,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SayHello.lib</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<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(dllimport)&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Say(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;szWords,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nLen);&nbsp;<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(dllimport)&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;Sum(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;fNum1,</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;fNum2);</span></div>
此时就使用Say和Sum函数了。 
<img src ="http://www.cppblog.com/XiaoMeiAQing/aggbug/97697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/XiaoMeiAQing/" target="_blank">小妹阿青</a> 2009-10-01 18:39 <a href="http://www.cppblog.com/XiaoMeiAQing/archive/2009/10/01/97697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>