1.MFC下生成动态库

1>显式调用

在.cpp文件里添加接口函数

 int sum(int a,int b)
{
return a + b;
} int sub(int a,int b)
{
return a - b;
}

在.def文件里标示导出接口
  sum @; sub @;

编译即可生成动态库

在.exe里调用

在头文件里添加

 #pragma comment(lib,"TestDLL")
int sum(int a,int b);
int sub(int a,int b);
 public:
void InitAll();
CString decToStr(int dec); public:
CString str1,str2;
int a,b;

Button事件

 void CTestDlgDlg::OnButtonAdd()
{
// TODO: Add your control notification handler code here
InitAll();
int c = sum(a,b);
CString sum1 = decToStr(c);
SetDlgItemText(IDC_EDIT3,sum1);
}
 void CTestDlgDlg::OnButtonSub()
{
// TODO: Add your control notification handler code here
InitAll();
int d = sub(a,b);
CString Sub = decToStr(d);
SetDlgItemText(IDC_EDIT4,Sub);
}
 void CTestDlgDlg::InitAll()
{
UpdateData(TRUE);
GetDlgItemText(IDC_EDIT1,str1);
GetDlgItemText(IDC_EDIT2,str2);
a = atoi(str1);
b = atoi(str2);
} CString CTestDlgDlg::decToStr(int dec)
{
CString str;
str.Format(_T("%d"),dec);
return str;
}

然后将相应的.dll和.lib拷贝到相应目录即可。

2>隐式调用

在头文件里添加

typedef int (*PFUNC)(int,int);

HMODULE hDllLib; PFUNC m_pSum; PFUNC m_pSub;

在BOOL CTestDlgDlg::OnInitDialog()里添加

     hDllLib = LoadLibrary("TestDll.dll");
if (hDllLib == NULL)
{
AfxMessageBox("dll load error");
return FALSE;
}
m_pSum = (PFUNC)(GetProcAddress(hDllLib,"sum"));
m_pSub = (PFUNC)(GetProcAddress(hDllLib,"sub"));

其他相应代码

 void CTestDlgDlg::OnButtonAdd()
{
// TODO: Add your control notification handler code here
InitAll();
int c= m_pSum(a,b);
CString sum1 = decToStr(c);
SetDlgItemText(IDC_EDIT3,sum1);
} void CTestDlgDlg::OnButtonSub()
{
// TODO: Add your control notification handler code here
InitAll();
int d = m_pSub(a,b);
CString Sub = decToStr(d);
SetDlgItemText(IDC_EDIT4,Sub);
} void CTestDlgDlg::InitAll()
{
UpdateData(TRUE);
GetDlgItemText(IDC_EDIT1,str1);
GetDlgItemText(IDC_EDIT2,str2);
a = atoi(str1);
b = atoi(str2);
} CString CTestDlgDlg::decToStr(int dec)
{
CString str;
str.Format(_T("%d"),dec);
return str;
}

2.Win32下动态库生成及调用

动态库头文件里添加

 extern "C" WIN32DLL_API int sum(int a,int b);
extern "C" WIN3
2DLL_API int sub(int a,int b);

.cpp文件里添加

 extern "C" WIN32DLL_API int sum(int a,int b)
{
return a + b;
} extern "C" WIN32DLL_API int sub(int a,int b)
{
return a - b;
}

编译即生成动态库

调用

在.exe头文件里添加

 #pragma comment(lib,"Win32DLL")

 extern "C" int sum(int a,int b);
extern "C" int sub(int a,int b);

其他相应文件

 void CTestDlgDlg::OnButtonAdd()
{
// TODO: Add your control notification handler code here
InitAll();
int c = sum(a,b);
CString sum1 = decToStr(c);
SetDlgItemText(IDC_EDIT3,sum1);
} void CTestDlgDlg::OnButtonSub()
{
// TODO: Add your control notification handler code here
InitAll();
int d = sub(a,b);
CString Sub = decToStr(d);
SetDlgItemText(IDC_EDIT4,Sub);
} void CTestDlgDlg::InitAll()
{
UpdateData(TRUE);
GetDlgItemText(IDC_EDIT1,str1);
GetDlgItemText(IDC_EDIT2,str2);
a = atoi(str1);
b = atoi(str2);
} CString CTestDlgDlg::decToStr(int dec)
{
CString str;
str.Format(_T("%d"),dec);
return str;
}

以上代码通过测试!

Windows下动态库的编译以及调用的更多相关文章

  1. Windows下动态库的隐式调用

    多年的工作经验告诉我Windows下使用动态库最简单的方法:使用def导出函数,然后隐式调用. 具体做法如下: (1)首先使用visual studio 创建“Win32项目”,如下图: (2)然后在 ...

  2. c++动态库封装及调用(2、windows下动态库创建)

    DLL即动态链接库(Dynamic-Link Libaray)的缩写,相当于Linux下的共享对象.Windows系统中大量采用了DLL机制,甚至内核的结构很大程度依赖与DLL机制.Windows下的 ...

  3. C++之条形码,windows下zint库的编译及应用(二)

    zint库是一个开源的第三方库,提供了生成条形码.二维码等功能.本文主要介绍zint库的生成及简单应用.   0windows下zint库的编译及应用(一)   工具/原料   vs2012 生成条形 ...

  4. c++动态库封装及调用(3、windows下动态库调用)

    1.DLL的隐式调用 隐式链接采用静态加载的方式,比较简单,需要.h..lib..dll三件套.新建“控制台应用程序”或“空项目”.配置如下: 项目->属性->配置属性->VC++ ...

  5. C++之条形码,windows下zint库的编译及应用(一)

    zint库是一个开源的第三方库,提供了生成条形码.二维码等功能.本文主要介绍zint库的生成及简单应用. 工具/原料   vs2012 代码文件下载   1 下载zint包 2 zint依赖另外两个库 ...

  6. Windows下动态库的制作与使用

    创建静态库

  7. Windows下zlib库和libPng库的编译和使用

    关于zlib库和libpng是干嘛的,我就不说了,度娘和谷歌都能告诉你.这里主要记录下windows下如何利用vs2010编译和使用这两个库. 一.zlib库的编译 首先要下载这个库,这个谷歌和百度也 ...

  8. windows 动态库的封装以及调用

    1.一个程序从源文件编译生成可执行文件的步骤:预编译 -->  编译 -->  汇编 --> 链接(1)预编译,即预处理,主要处理在源代码文件中以“#”开始的预编译指令,如宏展开.处 ...

  9. Windows下静态库与动态库的创建与使用

    Windows下静态库与动态库的创建与使用 学习内容:本博客介绍了Windows下使用Visual C++ 6.0制作与使用静态库与动态库的方法. --------CONTENTS-------- 一 ...

随机推荐

  1. Git回退到服务器某个版本正确姿势

    背景: Git协作中,成员不可避免地会提交一些错误的版本,由于Git相比SVN引入了本地仓库,操作会相对复杂,以下为姿势分解 找一个源文件RspUtils.java,加上一行注释 //测试回退git服 ...

  2. javascript中关于this的理解

    首先看一下这几个定义 this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被视为某个对象的方法调用时,this等于那个对象. 不过,匿名函数的执行环境具有全 ...

  3. 手机端跳转和pc端跳转

    http://jingyan.baidu.com/article/cdddd41c61823e53cb00e198.html 参考网址 浏览:11532 | 更新:2014-04-22 16:51 第 ...

  4. C 语言字符数组的定义与初始化

    1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'} ...

  5. 《高性能Javascript》读书笔记-4

    第四章 算法和流程控制 代码组织结构和解决具体问题的思路是影响代码性能的主要因素 循环处理是最常见的编程模式之一,也是提高性能的关注点之一 循环分四种:标准for循环 ; i < Things. ...

  6. hdu_5884_Sort(二分+单调队列)

    题目链接:hdu_5884_Sort 题意: 有n个数,每个数有个值,现在你可以选择每次K个数合并,合并的消耗为这K个数的权值和,问在合并为只有1个数的时候,总消耗不超过T的情况下,最小的K是多少 题 ...

  7. Bootstrap介绍

    Bootstrap是基于HTML.CSS和JavaScript开源的前端开发工具包. 1.响应式布局: 效果:根据浏览器的宽度来调整页面布局. 例如: <html lang="en&q ...

  8. jsonp原来是这么回事,豁然开朗

    什么是JSONP 先说说JSONP是怎么产生的: 其实网上关于JSONP的讲解有很多,但却千篇一律,而且云里雾里,对于很多刚接触的人来讲理解起来有些困难,小可不才,试着用自己的方式来阐释一下这个问题, ...

  9. html5 读写sqlite数据库

    var db = openDatabase('MyData','','My Database',102400); //首先它创建一个数据库表,里面有3个字段 db.transaction(functi ...

  10. layoutSubview触发时机

    layoutSubviews在以下情况下会被调用: 1.init初始化不会触发layoutSubviews 2.addSubview会触发layoutSubviews 3.设置view的Frame会触 ...