﻿<?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++博客-shrimp-文章分类-C++</title><link>http://www.cppblog.com/shrimp/category/17385.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 25 Jul 2011 12:56:20 GMT</lastBuildDate><pubDate>Mon, 25 Jul 2011 12:56:20 GMT</pubDate><ttl>60</ttl><item><title>使用C++调用C++ dll的关键步骤 </title><link>http://www.cppblog.com/shrimp/articles/151810.html</link><dc:creator>shrimp</dc:creator><author>shrimp</author><pubDate>Mon, 25 Jul 2011 11:14:00 GMT</pubDate><guid>http://www.cppblog.com/shrimp/articles/151810.html</guid><wfw:comment>http://www.cppblog.com/shrimp/comments/151810.html</wfw:comment><comments>http://www.cppblog.com/shrimp/articles/151810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shrimp/comments/commentRss/151810.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shrimp/services/trackbacks/151810.html</trackback:ping><description><![CDATA[被调用的dll项目
<p>　　/*dllDemo.h中*/</p>
<p>　　extern "C" _declspec(dllexport) void Func(void); //接口函数声明</p>
<p>　　/*dllDemo.cpp中*/</p>
<p>　　#include "dllDemo.h"</p>
<p>　　extern "C" _declspec(dllexport)void Sum(void)&nbsp;&nbsp;&nbsp; //接口函数定义</p>
<p>　　{</p>
<p>　　return;</p>
<p>　　}</p>
<p>　　_declspec，Declare Specification，这个关键字可以理解为声明规范。它有许多用法，语法如下：</p>
<p>　　__declspec ( extended-decl-modifier-seq )</p>
<p>　　配合dllexport和dllimport，分别表示导入和到导出dll接口函数。</p>
<p>　　调用dll的项目 - 显式调用</p>
<p>　　1）只需要dll文件</p>
<p>　　2）在调用处用法如下</p>
<p>　　代码</p>
<p>　　// a)声明一个和dll接口函数规则相同的函数指针</p>
<p>　　typedef void(*pFunc)(void);</p>
<p>　　pFunc doFunc=NULL;</p>
<p>　　// b)加载动态链接库dll文件；</p>
<p>　　HINSTANCE hDLL;</p>
<p>　　hDLL = LoadLibrary("dllDemo.dll");</p>
<p>　　// c)本地函数指针获得dll中的接口函数；</p>
<p>　　doFunc=(pFunc)GetProcAddress(hDLL,"Func");</p>
<p>　　// d)调用</p>
<p>　　if(doFunc)</p>
<p>　　{</p>
<p>　　doFunc();</p>
<p>　　}</p>
<p>　　3）调用完毕可以使用Freelibrary(hDLL)释放dll文件。</p>
<p>　　调用dll的项目 - 隐式调用</p>
<p>　　1）需要dll</p>
<p>　　2）需要lib，并且在项目依赖项中添加</p>
<p>　　3）调用处代码如下</p>
<p>　　//a) cpp头部声明来自dll的外部接口函数，函数名必须一样。</p>
<p>　　extern "C"_declspec(dllimport) void Func(void);</p>
<p>　　int main()</p>
<p>　　{</p>
<p>　　//b) 像使用其他函数一样使用dll接口函数</p>
<p>　　Func();</p>
<p>　　return 0;</p>
<p>　　}</p>
<p>　　4）运行期间无法释放dll。</p>
<br />
<div align="center">
<script language="javascript" src="/plus/ad_js.php?aid=2"></script></div>
<br />
转文地址：<a href="http://www.stuhack.com/biancheng/c/38592.html">http://www.stuhack.com/biancheng/c/38592.html</a>  <img src ="http://www.cppblog.com/shrimp/aggbug/151810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shrimp/" target="_blank">shrimp</a> 2011-07-25 19:14 <a href="http://www.cppblog.com/shrimp/articles/151810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>