动态库的创建和调用

一、动态库的创建

新建工程–》win32 Dynamic-Link Library-》创建三个文件,如下内容

动态库是Microsoft Windows组件模型的核心,动态库是一个可执行的模块,包含一些独立的文件,但是额应用程序不同,动态链接库没有自己的消息循环,且不能单独执行,需要通过应用程序或者其他发动态库调用才能被执行,动态库一般是封装了一些函数的功能的函数集合,用来提供给其他的函数来调用;

文件1:主要是输出函数
文件名:sample_01.def (名字以.def后缀)
内容:EXOPRT是关键字,
是动态库的输出函数(只是函数名)
文件2:sample_01.h (头文件)
内容:

#ifndef SAMPLE_01_H //防止重复引用头文件
#define SAMPLE_01_H
#ifdef _cplusplus
exter "c"{
#endif

int _stdcall  add(int a,int b);
#ifdef _cpluslus
}
#endif
#endif

文件3:Main.cpp 实现了add的方法

#include<stdio.h>
#include"sample_01.h"

//_stdcall 是一个调用的关键字,从右向左开始传参
int _stdcall  add(int a,int b){
    return a+b;
}

将文件1、文件2、文件3一起编译链接、执行。生成了一个sample_01.dll的动态库。

文件1是一个模板,告诉编译器下面的函数是输出函数,文件2是一个声明的过程,文件3是一个函数实现的过程;

内部调用的时候:
我们自己封装的动态库,在使用的时候,有几点需要注意:
1.必须自己实现,不能调用系统函数;
2.我么可以同时封装多个函数,只要将他们全部定义在EXPORT后面,并且都实现;
3.返回值没有要求,可以是int,也可以char,char *,void,都是可以的;
4.使用时,我们必须找到静态库.lib,这个是直接指定在头文件中;动态库是在链接的时候,我们自己手动移动过去的;
5.每一次改变动态库,都必须重新编译。
6.再文件中_stdcall是windows下API的默认调用方式,我们也可以换成c的调用方式_cdecl的,只是告诉编译器他们的入参顺序和堆栈的清理工作的安排;
7.对于重载函数也是可以执行的,但是必须加修饰;

二、动态库的调用

创建一个工程–》Win32 Console Application ->添加一个main.cpp调用一下自己创建的动态库

我们自己实现的动态库,我们调用一下

#include<stdio.h>
#include "../text/text.h"  //找到自己创建的动态库的头文件

#ifdef _DEBUG
#pragma comment(lib,"../text/Debug/text.lib")//在debug指定静态库的路径
#else
#pragma comment(lib,"../text/Release/text.lib")//在release版本下,指定路径
#endif

//将生成的动态库,将.dll移动到当前项目下debug和release下;
int main(int argc,char *argv[])
{
     printf("99+55=%d\n",add(99,55));
     printf("99/3=%d\n",dev(99,3));
     int s = 10;
     strrevd(&s);
     printf("%d\n",s);
     return 0;
}    

三、自己封装组件

新建一个ATL COM AppWizard ->对于一个类添加Controls控件-》full Control添加一个复合控件–》给这个控件添加一个方法-》分别输入方法名称-方法参数([in] int a
/[in]是输入,[out,Retval]时输出/)

简单功能的实现

四、
新建一个 MFC AppWizard [exe]->选择基本对话框-》完成–》出现一个控制面板–》插入控件–》属性改成不可见–》建立类向导-》选择一个类-》为该类添加一个变量–》添加成员变量名–》注册第三个中的组件(打开运行窗口-》输入rehsvr 32 +第三个组件中的.dll的路径注册)–》注册成功

执行运行!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值