<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Timothy&#039;s Space &#187; dll</title>
	<atom:link href="http://www.xiaozhou.net/tag/dll/feed" rel="self" type="application/rss+xml" />
	<link>http://www.xiaozhou.net</link>
	<description>君看一叶舟，出没风波里</description>
	<lastBuildDate>Thu, 02 Sep 2010 15:10:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>用.DEF文件导出DLL中的函数</title>
		<link>http://www.xiaozhou.net/vcdevelopment/to-use-def-file-export-dll-functions-in-2004-10-27.htm</link>
		<comments>http://www.xiaozhou.net/vcdevelopment/to-use-def-file-export-dll-functions-in-2004-10-27.htm#comments</comments>
		<pubDate>Wed, 27 Oct 2004 04:27:29 +0000</pubDate>
		<dc:creator>Timothy</dc:creator>
				<category><![CDATA[VC开发]]></category>
		<category><![CDATA[.DEF]]></category>
		<category><![CDATA[dll]]></category>
		<category><![CDATA[export]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=42</guid>
		<description><![CDATA[通常我们在调用DLL时所需的DLL文件必须位于以下三个目录之一： 　　(1)Windows的系统目录：\windows\system； 　　(2)DOS中path所指出的任何目录； 　　(3)程序所在的目录。 　　一、动态链接库的结构 　　动态链接库中定义有两种函数：导出函数(export function)和内部函数(internal function)， 导出函数可以被其它模块调用，内部函数只能在库内部使用。我们在用C＋＋定制动态库文件时， 需要编写的就是包含导出函数表的模块定义文件(.DEF)和实现导出函数功能的C＋＋文件。下面以 Sample.dll为例介绍DEF文件和实现文件的结构。 　　1.模块定义文件(.DEF)是一个或多个用于描述DLL属性的模块语句组成的文本文件，每个DEF文 件至少必须包含以下模块定义语句： 　　·第一个语句必须是LIBRARY语句，指出DLL的名字； 　　·EXPORTS语句列出被导出函数的名字； 　　·可以使用DESCRIPTION语句描述DLL的用途(此句可选)； 　　·&#8221;；&#8221;对一行进行注释(可选)。 　　2.实现文件 　　实现入口表函数的cpp文件中，包含DLL入口点处理的API函数和导出函数的代码。 　　二、创建Sample.dll 　　 1.首先创建Sample.dll的工程,启动VC＋＋5.0按以下步骤生成DLL工程: 　　·在选单中选择File\New\Project； 　　·在工程列表中选择Win32 Dynamic－Link Library； 　　·在Project Name中输入工程名:Sample； 　　·单击Location右边按钮,选择c:\sample目录； 　　·单击OK完成,至此已创建了Sample.dll的工程文件。 　　2.创建Sample.def文件： 　　·在选单中选择File\New\Text File； 　　·输入以下代码后保存文件名&#8221;Sample.def&#8221;： 　　 ;Sample.def 　　 ;指出DLL的名字Sample,链接器将这个名字放到DLL导入库中 　　 LIBRARY Sample 　　 ;定义导出函数ShowMe()为例 　　 EXPORTS 　　 ShowMe 　　 ;def文件结束 　　3.创建Sample.cpp 　　 .在选单中选择File\New\C＋＋ Source File项 　　 [...]]]></description>
			<content:encoded><![CDATA[<p>通常我们在调用DLL时所需的DLL文件必须位于以下三个目录之一：<br />
　　(1)Windows的系统目录：\windows\system；<br />
　　(2)DOS中path所指出的任何目录；<br />
　　(3)程序所在的目录。<br />
　　一、动态链接库的结构</p>
<p>　　动态链接库中定义有两种函数：导出函数(export function)和内部函数(internal function)，<br />
导出函数可以被其它模块调用，内部函数只能在库内部使用。我们在用C＋＋定制动态库文件时，<br />
需要编写的就是包含导出函数表的模块定义文件(.DEF)和实现导出函数功能的C＋＋文件。下面以<br />
Sample.dll为例介绍DEF文件和实现文件的结构。<br />
　　1.模块定义文件(.DEF)是一个或多个用于描述DLL属性的模块语句组成的文本文件，每个DEF文<br />
件至少必须包含以下模块定义语句：<br />
　　·第一个语句必须是LIBRARY语句，指出DLL的名字；<br />
　　·EXPORTS语句列出被导出函数的名字；<br />
　　·可以使用DESCRIPTION语句描述DLL的用途(此句可选)；<br />
　　·&#8221;；&#8221;对一行进行注释(可选)。<br />
　　2.实现文件<br />
　　实现入口表函数的cpp文件中，包含DLL入口点处理的API函数和导出函数的代码。<br />
　　二、创建Sample.dll<br />
　　 1.首先创建Sample.dll的工程,启动VC＋＋5.0按以下步骤生成DLL工程:<br />
　　·在选单中选择File\New\Project；<br />
　　·在工程列表中选择Win32 Dynamic－Link Library；<br />
　　·在Project Name中输入工程名:Sample；<br />
　　·单击Location右边按钮,选择c:\sample目录；<br />
　　·单击OK完成,至此已创建了Sample.dll的工程文件。<br />
　　2.创建Sample.def文件：<br />
　　·在选单中选择File\New\Text File；<br />
　　·输入以下代码后保存文件名&#8221;Sample.def&#8221;：<br />
　　 ;Sample.def<br />
　　 ;指出DLL的名字Sample,链接器将这个名字放到DLL导入库中<br />
　　 LIBRARY Sample<br />
　　 ;定义导出函数ShowMe()为例</p>
<p>　　 EXPORTS<br />
　　 ShowMe<br />
　　 ;def文件结束<br />
　　3.创建Sample.cpp<br />
　　 .在选单中选择File\New\C＋＋ Source File项<br />
　　 .输入以下代码后保存文件名&#8221;Sample.cpp&#8221;<br />
　　 //Sample.cpp<br />
　　 #include 〈windows.h〉<br />
　　 int ShowMe(void);<br />
　　 //DllEntryPoint为DLL入口点函数,负责初试化并终止DLL<br />
　　 BOOL WINAPI DllEntryPoint(HINSTANCE hDLL,DWORD dwReason,LPVOID Reserved)<br />
　　 { switch(dwReason)<br />
　　 { case DLL-PROCESS-ATTACH:<br />
　　 { break; }<br />
　　 case DLL－PROCESS－DETACH:<br />
　　 { break; } }<br />
　　 return TRUE; }<br />
　　 int ShowMe(void)<br />
　　 { //蜂鸣器响一下<br />
　　 MessageBeep((WORD)－1);<br />
　　 MessageBox(&#8220;你好!&#8221;);<br />
　　 return 1; }<br />
　　4.编译DLL文件<br />
　　从Build选单中选择Build Sample.DLL,产生Sample.DLL文件,以后就可以随时调用了。<br />
　　三、在应用程序中调用DLL文件<br />
　　在应用程序中要首先装入DLL后才能调用导出表中的函数,例如用MFC创建基于对话框的工<br />
程Test,并在对话框上放置&#8221;Load&#8221;按钮,你就必须添加装载代码。<br />
　　1.首先在TestDlg.cpp的首部添加变量设置代码：<br />
　　//设置全局变量gLibSample用于存储DLL句柄<br />
　　HINSTANCE gLibSample=NULL;<br />
　　//第二个变量ShowMe是指向DLL库中ShowMe()函数的指针<br />
　　typedef int( SHOWME)(void);</p>
<p>　　SHOWME ShowMe;<br />
　　2.利用ClassWizard为&#8221;Load&#8221;按钮添加装载DLL的代码：<br />
　　Void CTestDlg::OnLoadButton()<br />
　　{ //要添加的代码如下<br />
　　 if(gLibMyDLL!=NULL)<br />
　　 { MessageBox(&#8220;The Sample.DLL has already been load.&#8221;);<br />
　　 return; }<br />
　　 //装载Sample.dll，未加路径，将在三个默认路径中寻找<br />
　　 gLibSample=LoadLibrary(&#8220;SAMPLE.DLL&#8221;);<br />
　　 //返回DLL中ShowMe()函数的地址<br />
　　 ShowMe=(SHOWME)GetProcAddress(gLibSample,&#8221;ShowMe&#8221;); }<br />
　　3.只要DLL装载成功,在应用程序中就可以直接调用ShowMe()函数（本程序在Windows 95,VC＋＋5.0中运行通过）。</p>
<h3  class="related_post_title">你可能也对下列文章感兴趣</h3><ul class="related_post"><li>2004年10月26日 -- <a href="http://www.xiaozhou.net/vcdevelopment/dynamically-loaded-dll-2004-10-26.htm" title="动态加载DLL">动态加载DLL</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.xiaozhou.net/vcdevelopment/to-use-def-file-export-dll-functions-in-2004-10-27.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>动态加载DLL</title>
		<link>http://www.xiaozhou.net/vcdevelopment/dynamically-loaded-dll-2004-10-26.htm</link>
		<comments>http://www.xiaozhou.net/vcdevelopment/dynamically-loaded-dll-2004-10-26.htm#comments</comments>
		<pubDate>Tue, 26 Oct 2004 04:16:32 +0000</pubDate>
		<dc:creator>Timothy</dc:creator>
				<category><![CDATA[VC开发]]></category>
		<category><![CDATA[dll]]></category>
		<category><![CDATA[dynamic]]></category>
		<category><![CDATA[load]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=35</guid>
		<description><![CDATA[核心代码片断： void CLoadLibraryTestDlg::OnLoad() { typedef int (WINAPI * MyFun)(HWND,LPCTSTR,LPCTSTR,UINT); MyFun fun=NULL; HINSTANCE hHandle; hHandle=LoadLibrary(&#8220;user32.dll&#8221;); fun=(int (WINAPI *)(HWND,LPCTSTR,LPCTSTR,UINT))::GetProcAddress(hHandle,&#8221;MessageBoxA&#8221;); if(fun!=NULL) { fun(NULL,&#8221;hahahahahahahaha&#8221;,&#8221;success &#8221;,MB_OK); } } 你可能也对下列文章感兴趣2004年12月22日 -- 动态加载并显示图片 (0)2004年12月20日 -- 动态加载位图 (0)2010年06月19日 -- 启用Lazy Load插件 (13)2009年12月20日 -- Linq to Sql 之延迟加载与立即加载 (0)2004年10月27日 -- 用.DEF文件导出DLL中的函数 (1)2004年10月26日 -- 从文件装载图象 (0)]]></description>
			<content:encoded><![CDATA[<p>核心代码片断：</p>
<p>void CLoadLibraryTestDlg::OnLoad()<br />
{<br />
	typedef int (WINAPI * MyFun)(HWND,LPCTSTR,LPCTSTR,UINT);<br />
	MyFun fun=NULL;<br />
	HINSTANCE hHandle;<br />
	hHandle=LoadLibrary(&#8220;user32.dll&#8221;);<br />
	fun=(int (WINAPI *)(HWND,LPCTSTR,LPCTSTR,UINT))::GetProcAddress(hHandle,&#8221;MessageBoxA&#8221;);<br />
	if(fun!=NULL)<br />
	{<br />
		fun(NULL,&#8221;hahahahahahahaha&#8221;,&#8221;success <img src='http://www.xiaozhou.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> &#8221;,MB_OK);<br />
	}<br />
}</p>
<h3  class="related_post_title">你可能也对下列文章感兴趣</h3><ul class="related_post"><li>2004年12月22日 -- <a href="http://www.xiaozhou.net/vcdevelopment/dynamic-loading-and-explicit-pictures-2004-12-22.htm" title="动态加载并显示图片">动态加载并显示图片</a> (0)</li><li>2004年12月20日 -- <a href="http://www.xiaozhou.net/vcdevelopment/dynamic-loading-a-bitmap-2004-12-20.htm" title="动态加载位图">动态加载位图</a> (0)</li><li>2010年06月19日 -- <a href="http://www.xiaozhou.net/aboutsite/wordpress/lazy_load_plugin_enabled-2010-06-19.htm" title="启用Lazy Load插件">启用Lazy Load插件</a> (13)</li><li>2009年12月20日 -- <a href="http://www.xiaozhou.net/dotnetdevelopment/linq-to-sql-delay-load-and-immediately-load-2009-12-20.htm" title="Linq to Sql 之延迟加载与立即加载">Linq to Sql 之延迟加载与立即加载</a> (0)</li><li>2004年10月27日 -- <a href="http://www.xiaozhou.net/vcdevelopment/to-use-def-file-export-dll-functions-in-2004-10-27.htm" title="用.DEF文件导出DLL中的函数">用.DEF文件导出DLL中的函数</a> (1)</li><li>2004年10月26日 -- <a href="http://www.xiaozhou.net/vcdevelopment/load-images-from-the-file-2004-10-26.htm" title="从文件装载图象">从文件装载图象</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.xiaozhou.net/vcdevelopment/dynamically-loaded-dll-2004-10-26.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
