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. ACdream 1728 SJY's First Task

    简单题. 先建树,我用邻接表来存了.然后对于每个叶子结点DFS一下,DFS深度超过了K就return,找到了叶子节点就记录下来,最后排个序,然后输出答案. 由于结点编号比较奇葩,所以用两个map来转换 ...

  2. 使用php创建WebSocket服务

    执行方法:首先先修改server.php与index.html的ip通过命令行执行 [php路径]php.exe "[文件路径]server.php"然后通过浏览器打开index. ...

  3. Apple 移动设备绑定动态生成元素点击事件$(document).on('click',element,callback)失效解决方法

    今天在工作中刚接触到了微信社区相关的开发工作,测试的时候发现,动态生成元素的点击事件在andriod设备上可以触发,而在apple移动设备上却无法触发.好奇的我赶紧百度了下,很快就在stackover ...

  4. Django的用户认证

    Django中用户登陆的实例: 逻辑流程 1.客户端发起请求,根据url规则会首先转至index函数, 2.在index函数上添加一个装饰器('@login_required',django自带).加 ...

  5. CodeForces 605A Sorting Railway Cars 思维

    早起一水…… 题意看着和蓝桥杯B组的大题第二道貌似一个意思…… 不过还是有亮瞎双眼的超短代码…… 总的意思呢…… 就是最长增长子序列且增长差距为1的的…… 然后n-最大长度…… 这都怎么想的…… 希望 ...

  6. FZU 1920 Left Mouse Button 简单搜索

    题意就是扫雷 问最少多少次可以把图点开…… 思路也很明显 就是先把所有的标记一遍 就当所有的都要点…… 录入图…… 所有雷都不标记…… 之后呢 遍历图…… 然后碰到0就搜索一圈 碰到数字就标记…… 不 ...

  7. Openjudge-计算概论(A)-称体重

    描述: 赵.钱.孙.李四个人中既有大人也有小孩,给他们称体重时发现,他们每个人的体重都不一样,且体重(单位:公斤)恰好是10的整数倍,且他们的体重都不高 于50公斤,已知赵.钱两人的体重之和恰好等于孙 ...

  8. mysql灵活分页存储过程

    ), -- 表名 ), -- 排序字段(必须!支持多字段不用加order by) IN _PageIndex int, -- 指定当前为第几页 IN _PageSize int, -- 每页多少条记录 ...

  9. linux 非root用户 ssh 免密码登录

    之所以要把这个记录下来 是因为它的确和root用户不一样root用户 不需要改动什么权限问题  只要生成私钥/公钥对 即可 但是一样的操作在普通用户上就出了问题了 折腾了老半天 ssh-keygen ...

  10. D - Digging(01背包,贪心)

    D - Digging Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit St ...