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. PostgreSQL学习手册

    事实上之前有很长一段时间都在纠结是否有必要好好学习它,但是始终都没有一个很好的理由说服自己.甚至是直到这个项目最终决定选用PostgreSQL 时,我都没有真正意识到学习它的价值,当时只是想反正和其它 ...

  2. 4、File类之获取方法

    这些方法也都是File类内置的成员方法,无需我们写,直接拿来用即可. 基本获取 public class Demo { public static void main(String[] args) { ...

  3. Microsoft Visual Studio 2015 python 安装 mysql-python 出错解决

    Microsoft Visual Studio 2015 安装 python 连接包 mysql-python出错   第一种 pip安装方式 安装Microsoft Visual C++ Compi ...

  4. 【LeetCode】3. Longest Substring Without Repeating Characters

    Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...

  5. HDU 2209 翻纸牌游戏(DFS)

    题目链接 Problem Description 有一种纸牌游戏,很有意思,给你N张纸牌,一字排开,纸牌有正反两面,开始的纸牌可能是一种乱的状态(有些朝正,有些朝反),现在你需要整理这些纸牌.但是麻烦 ...

  6. 小米2s刷机

    每次系统内存不足,卡的不行就恨不得马上换新手机,发现手机也没有什么大的毛病,也没有其他苛刻的要求. 换个新系统继续使用吧,除了屏幕小了一点,将就了吧.物尽其责,坚决抵制过度消费. 小米手机2s 16G ...

  7. 洛谷-火柴棒等式-NOIP2008提高组复赛

    题目描述 Description 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: ...

  8. 重拾Ruby—新的征程

    作家格拉德威尔在<异类>一书中指出: “人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力.1万小时的锤炼是任何人从平凡变成超凡的必要条件.“ 他将此称为“一万小时定 ...

  9. why do we need virtual methods in C++?

    http://stackoverflow.com/questions/2391679/why-do-we-need-virtual-methods-in-c Basic idea: when mark ...

  10. CodeForces 567C Geometric Progression 类似dp的递推统计方案数

    input n,k 1<=n,k<=200000 a1 a2 ... an 1<=ai<=1e9 output 数组中选三个数,且三个数的下标严格递增,凑成形如b,b*k,b* ...