惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy International News Feed
MongoDB | Blog
MongoDB | Blog
WordPress大学
WordPress大学
小众软件
小众软件
H
Hacker News: Front Page
S
Securelist
S
SegmentFault 最新的问题
Jina AI
Jina AI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
P
Palo Alto Networks Blog
博客园 - 司徒正美
量子位
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
Cyberwarzone
Cyberwarzone
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Privacy & Cybersecurity Law Blog
月光博客
月光博客
V
Visual Studio Blog
C
CERT Recently Published Vulnerability Notes
爱范儿
爱范儿
T
Threat Research - Cisco Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Apple Machine Learning Research
Apple Machine Learning Research
T
The Exploit Database - CXSecurity.com
T
Tenable Blog
L
LINUX DO - 热门话题
MyScale Blog
MyScale Blog
Hugging Face - Blog
Hugging Face - Blog
M
MIT News - Artificial intelligence
腾讯CDC
NISL@THU
NISL@THU
A
Arctic Wolf
Scott Helme
Scott Helme
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog
L
LINUX DO - 最新话题
The GitHub Blog
The GitHub Blog
Help Net Security
Help Net Security
C
Check Point Blog
O
OpenAI News
D
DataBreaches.Net
I
InfoQ
N
News and Events Feed by Topic
S
Security @ Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
F
Fortinet All Blogs

博客园 - 枫崖

操作系统引导 win7 安装arcgis后出现问题解决方案 VS2010 MSDN VIM 入门(转载) Visual Studio 2010 添加vim支持 删除svn版本信息 - 枫崖 - 博客园 ArcGIS Server中创建ao对象的CLSID如何获得 有关IHttpModule与页面的执行顺序 使用python查询中文汉字的Unicode C++中动态链接库的一些概念及入门(1) Ubuntu 系统下终端快捷键设置 配置MapServer出现的一些问题及解决办法 yyyy-MM-dd日期正则表达式 未能加载文件或程序集“***”或它的某一个依赖项。拒绝访问。 mssql中sp_executesql和Exexute Win7 打开或关闭Windows功能 窗口空白 解决方案(转载) SQL Server 2008除去更新表失败的提示框 arcgis server 中使用iframepa包含地图页面 - 枫崖 对于将javascript嵌入到程序集中
C++中动态链接库的一些概念及入门(2)
枫崖 · 2010-02-03 · via 博客园 - 枫崖

  上一篇讲述了动态链接库的一些概念及静态库的编写和调用,这篇会介绍到动态链接库dll的编写及调用。

一、建立dll工程

   仍然在上篇的基础上新建一个Project,类型为"Win32 Dynamic-link Library”,如图,工程名取名为DllLib

image

添加一个C++文件,取名为sub.cpp,这里添加一个函数用于做减法运算

int sub(int x,int y)
{
    return x-y;
}

原本以为编译链接生成DllLib.dll,DllLib.lib这两个文件,于是到这个工程的debug目录下,很奇怪没有找到那个引入库DllLib.lib文件,先不管它,仍然像上篇那样调用静态库那样调用这个sub方法,看结果如何。

二、调用自己编写的dll

  1、声明sub函数

  2、声明lib位置

     ClientApp.cpp代码如下

#include "stdafx.h"
#include "stdio.h"
extern int add(int x,int y);
extern int sub(int x,int y);
#pragma comment(lib,"..\\StaticLib\\debug\\StaticLib.lib")
#pragma comment(lib,"..\\DllLib\\debug\\DllLib.lib")
int main(int argc, char* argv[])
{
    int a=add(5,4);
    printf("result:%d\n",a);
    int b=sub(5,4);
    printf("sub result:%d\n",b);
    return 0;
}

编译没有问题,链接就出现错误:cannot open file "Debug/DllLib.lib",上面提到为什么生成dll时本来还有引入库文件没有生成。这就是动态库和静态库另外一个区别,对于动态链接库导出函数需要在函数前面添加__declspec(dllexport)这个关键字,将这个函数导出来。好了,重新生成DllLib工程发现其Debug目录下有了lib导入库文件。

image

nice,再回到ClientApp中重新编译链接没有错误,运行,预想的结果没有出现,出现下面错误提示框,why?

image

、刚刚生成的那个dll文件缺失,oh,原来编写的dll文件这个ClientApp找不到。

ps:windows程序运行时如何查找其所需要的dll,查找顺序如下:

      1、程序的执行目录(这里是D:\Code\Study\vc\DllStudy\ClientApp\Debug)

      2、当前目录

      3、系统目录

      4、path环境变量中所列的路径

因此我们将DllLib.dll拷贝到D:\Code\Study\vc\DllStudy\ClientApp\Debug下面,运行,ok!!!