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. 初学者必知的HTML规范

    一.整体结构 用div代替table布局 结构.表现.行为三者分离,避免内联 良好的树形结构四个空格代替一个tab 能并列就不嵌套<div></div><div>& ...

  2. MVC中的Startup.Auth.cs、BundleConfig.cs、FilterConfig.cs和RouteConfig.cs

    一.MVC中的Startup.Auth.cs.BundleConfig.cs.FilterConfig.cs和RouteConfig.cs四个文件在app_start中 <1>Bundle ...

  3. 2016 SyScan360 国际前瞻信息安全会议 多角度探讨信息安全

    SyScan360国际前瞻信息安全会议由与中国第一大互联网安全公司-360公司与SyScan前瞻信息安全技术年会(TheSymposiumonSecurityforAsiaNetwork,以下简称Sy ...

  4. 图的存储结构:邻接矩阵(邻接表)&链式前向星

    [概念]疏松图&稠密图: 疏松图指,点连接的边不多的图,反之(点连接的边多)则为稠密图. Tips:邻接矩阵与邻接表相比,疏松图多用邻接表,稠密图多用邻接矩阵. 邻接矩阵: 开一个二维数组gr ...

  5. MongoDB高级操作

    参考MongoDB菜鸟教程 一.$type操作符 MongoDB 中可以使用的类型如下表所示: 类型 数字 备注 Double 1   String 2   Object 3   Array 4   ...

  6. 浙大pat 1011题解

    With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excite ...

  7. kettle新建资源库(4)

    工具中找资源库或者CTRL+R

  8. Chapter 14_5 _ENV和load

    load在加载代码块时,通常使用全局环境去初始化代码块的_ENV上值. 然而,load选项的第四个参数给出的值就是供_ENV用的.(loadfile函数参数也是一样) 举一个有关初始化的例子,假如我们 ...

  9. 第三次冲刺spring会议(第四次会议)

    [例会时间]2014/5/23 21:15 [例会地点]9#446 [例会形式]轮流发言 [例会主持]马翔 [例会记录]兰梦 小组成员:兰梦 ,马翔,李金吉,赵天,胡佳奇

  10. EXEC 和 SP_EXECUTESQL的区别

    摘要: MSSQL为我们提供了两种动态执行sql语句的命令:EXEC 和 SP_EXECUTESQL.通常SP_EXECUTESQL更具优势,因为它提供了输入输出的接口,且能够重用执行计划,大大提高执 ...