VS2010 Windows制作DLL
来源:互联网 发布:linux下创建文件夹 编辑:程序博客网 时间:2024/05/16 00:39
样例1:无.def
./maths.h
./maths.cpp
文件->新建->项目->visual c++->win32->win32控制台应用程序(win32项目也可以)
填写项目名称MyDLL->确定->下一步->DLL->完成。
.h和.cpp文件导出时都要加__declspec(dllexport),否则编译出错
没有dllmain.cpp,则提示没有入口点
样例2: 有.def
./maths.h
./maths.cpp
./maths.def
没有__declspec(dllexport)
增加.def
注意的几点:
1) .def不是必须的,可以使用__declspec(dllexport)代替
2) __declspec(dllexport)关键字导出 DLL 的函数
3) 模块定义 (.def) 文件是包含一个或多个描述 DLL 各种属性的 Module 语句的文本文件
4).def实例(使用 DEF 文件从 DLL 导出, http://msdn.microsoft.com/zh-cn/library/d91k01sh(v=VS.80).aspx)
LIBRARY BTREE文件中的第一个语句必须是 LIBRARY 语句。此语句将 .def 文件标识为属于 DLL。LIBRARY 语句的后面是 DLL 的名称。
EXPORTSEXPORTS 语句列出名称,可能的话还会列出 DLL 导出函数的序号值。通过在函数名的后面加上 @ 符和一个数字,给函数分配序号值。当指定序号值时,序号值的范围必须是从 1 到 N,其中 N 是 DLL 导出函数的个数。
Insert @1
Delete @2
5)动态链接库的应用基础
调用约定(Calling convention)决定:函数参数的压栈顺序,由调用者还是被调用者把参数弹出栈,以及产生函数修饰名的方法。编程调用DLL时,要注意调用约定的一致。
调用约定包括:
__cdecl
MFC默认调用约定。按从右至左的顺序压参数入栈,有调用者把参数弹出栈。对于C函数,__cdecl方式的名字修饰约定是在函数名称前添加一个下划线,对于C++函数使用不同的名字修饰方式。
__stdcall
所有的Win32 API函数都遵循该约定。按从右至左的顺序压参数入栈,由被调用者把参数弹出栈。对于C函数,__stdcall的名称修饰方式是在函数名字前添加下划线,在函数名字后添加@和函数参数的大小。
__fastcall
头两个DWORD类型或者占更少字节的参数被放入ECX和EDX寄存器,其他剩下的参数按从右到左的顺序压入栈。由被调用者把参数弹出栈。编译器使用两个@修饰函数名字,后跟十进制数表示的函数参数列表大小。
thiscall
仅仅应用与C++成员函数。This指针存放于CX寄存器,参数从右到左压栈。Thiscall不是C++的关键字,不能使用thiscall声明函数,它只能由编译器使用。
naked call
采用上述调用约定时,如果必要的话,进入函数时编译器会产生代码来保存ESI,EDI,EBX,EBP寄存器,退出函数时则产生代码恢复这些寄存器的内容。Naked call不产生这样的代码。Naked call不是类型修饰符,因此必须和__declspec共同使用。
Windows编程中常见的集中函数类型声明宏都与__stdcall和__cdecl有关:
#define CALLBACK __stdcall
#define WINAPI __stdcall
#define WINAPIV __cdecl
#define APIENTRY WINAPI
#define APIPRIVATE __stdcall
#define PASCAL __stdcall
6)
(1). Dependencies (推荐使用,要求有lib源代码)
一个项目被分成多个工程来做,一个主工程exe,其他为静态库lib
Project-->dependencies,设置主工程的依赖为其他静态库lib
这时,主工程的Resource Files中自动添加了lib
在主工程中需要用到其他库的位置加入库的头文件
(2). 直接将lib添加到需要用的工程中(不太推荐,lib没能统一管理)
提供了lib和其头文件
选择工程-->右键-->Add Files to Project
这时,主工程的Resource Files中自动添加了lib
在主工程中需要用到其他库的位置加入库的头文件
(3). 通过工程的Link设置(推荐,lib可以统一管理)
提供了lib和其头文件
Project-->settings-->Link,选择Categery中的Input
在object/library modules里输入的动态链接库对应的.lib文件名
在Additional library path中输入动态链接库对应的.lib的路径
在主工程中需要用到其他库的位置加入库的头文件
(4). #pragma (lib, "filename.lilb")(不太推荐,lib没能统一管理)
提供了lib和其头文件
在主工程中需要用到其他库的位置加入#pragma (lib, "filename.lib")
在主工程中需要用到其他库的位置加入库的头文件
参考:(文章名称)
dll的def文件与__declspec(dllexport)导出函数方式比较
vs创建和调用dll和lib经验
./maths.h
./maths.cpp
文件->新建->项目->visual c++->win32->win32控制台应用程序(win32项目也可以)
填写项目名称MyDLL->确定->下一步->DLL->完成。
- //maths.h
- __declspec(dllexport) int add(int a, int b);
- //maths.cpp
- #include "dll.h"
- __declspec(dllexport) int add(int a, int b)
- {
- return a+b;
- }
.h和.cpp文件导出时都要加__declspec(dllexport),否则编译出错
没有dllmain.cpp,则提示没有入口点
样例2: 有.def
./maths.h
./maths.cpp
./maths.def
- //maths.def
- LIBRARY DLL
- EXPORTS
- add
- //maths.h
- int add(int a, int b);
- //maths.cpp
- #include "dll.h"
- int add(int a, int b)
- {
- return a+b;
- }
没有__declspec(dllexport)
增加.def
注意的几点:
1) .def不是必须的,可以使用__declspec(dllexport)代替
2) __declspec(dllexport)关键字导出 DLL 的函数
3) 模块定义 (.def) 文件是包含一个或多个描述 DLL 各种属性的 Module 语句的文本文件
4).def实例(使用 DEF 文件从 DLL 导出, http://msdn.microsoft.com/zh-cn/library/d91k01sh(v=VS.80).aspx)
LIBRARY BTREE文件中的第一个语句必须是 LIBRARY 语句。此语句将 .def 文件标识为属于 DLL。LIBRARY 语句的后面是 DLL 的名称。
EXPORTSEXPORTS 语句列出名称,可能的话还会列出 DLL 导出函数的序号值。通过在函数名的后面加上 @ 符和一个数字,给函数分配序号值。当指定序号值时,序号值的范围必须是从 1 到 N,其中 N 是 DLL 导出函数的个数。
Insert @1
Delete @2
5)动态链接库的应用基础
调用约定(Calling convention)决定:函数参数的压栈顺序,由调用者还是被调用者把参数弹出栈,以及产生函数修饰名的方法。编程调用DLL时,要注意调用约定的一致。
调用约定包括:
__cdecl
MFC默认调用约定。按从右至左的顺序压参数入栈,有调用者把参数弹出栈。对于C函数,__cdecl方式的名字修饰约定是在函数名称前添加一个下划线,对于C++函数使用不同的名字修饰方式。
__stdcall
所有的Win32 API函数都遵循该约定。按从右至左的顺序压参数入栈,由被调用者把参数弹出栈。对于C函数,__stdcall的名称修饰方式是在函数名字前添加下划线,在函数名字后添加@和函数参数的大小。
__fastcall
头两个DWORD类型或者占更少字节的参数被放入ECX和EDX寄存器,其他剩下的参数按从右到左的顺序压入栈。由被调用者把参数弹出栈。编译器使用两个@修饰函数名字,后跟十进制数表示的函数参数列表大小。
thiscall
仅仅应用与C++成员函数。This指针存放于CX寄存器,参数从右到左压栈。Thiscall不是C++的关键字,不能使用thiscall声明函数,它只能由编译器使用。
naked call
采用上述调用约定时,如果必要的话,进入函数时编译器会产生代码来保存ESI,EDI,EBX,EBP寄存器,退出函数时则产生代码恢复这些寄存器的内容。Naked call不产生这样的代码。Naked call不是类型修饰符,因此必须和__declspec共同使用。
Windows编程中常见的集中函数类型声明宏都与__stdcall和__cdecl有关:
#define CALLBACK __stdcall
#define WINAPI __stdcall
#define WINAPIV __cdecl
#define APIENTRY WINAPI
#define APIPRIVATE __stdcall
#define PASCAL __stdcall
6)
(1). Dependencies (推荐使用,要求有lib源代码)
一个项目被分成多个工程来做,一个主工程exe,其他为静态库lib
Project-->dependencies,设置主工程的依赖为其他静态库lib
这时,主工程的Resource Files中自动添加了lib
在主工程中需要用到其他库的位置加入库的头文件
(2). 直接将lib添加到需要用的工程中(不太推荐,lib没能统一管理)
提供了lib和其头文件
选择工程-->右键-->Add Files to Project
这时,主工程的Resource Files中自动添加了lib
在主工程中需要用到其他库的位置加入库的头文件
(3). 通过工程的Link设置(推荐,lib可以统一管理)
提供了lib和其头文件
Project-->settings-->Link,选择Categery中的Input
在object/library modules里输入的动态链接库对应的.lib文件名
在Additional library path中输入动态链接库对应的.lib的路径
在主工程中需要用到其他库的位置加入库的头文件
(4). #pragma (lib, "filename.lilb")(不太推荐,lib没能统一管理)
提供了lib和其头文件
在主工程中需要用到其他库的位置加入#pragma (lib, "filename.lib")
在主工程中需要用到其他库的位置加入库的头文件
参考:(文章名称)
dll的def文件与__declspec(dllexport)导出函数方式比较
vs创建和调用dll和lib经验
0
上一篇:VS2010 fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
下一篇:VS2010 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它
相关热门文章
- LNK1123: 转换到 COFF 期间失...
- WIN7访问共享:0x80070035 找不...
- Delphi 2010下载+完美破解...
- vs2010调试C++程序时提示 无...
- VISIO,不规则封闭图形填充方...
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- VS2010 Windows制作DLL
- vs2010制作dll
- WIN7+VS2010 制作与调用DLL
- vs2010中c#中类库dll制作和引用方法
- vs2010中c#中类库dll制作和引用方法
- 关于QT与windows与VS2010与DLL二三事
- 制作DLL
- Dll制作
- Windows下Cmake与VS联合制作dll
- MSVCR100.dll VS2010
- VS2010 关于导出DLL
- vs2010 创建dll
- VS2010 加载Dll文件
- VS2010编译缺少dll
- VS2010下创建Dll
- VS2010中创建DLL
- vs2010编写dll
- VS2010开发DLL
- 简单分享一个轻量级自动化测试框架目录结构设计
- VS2010 动态库没有生产LIB
- VS2010 fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 用shell脚本生成文本文件
- JavaScript学习笔记一 - 基本语法,数据类型、变量
- VS2010 Windows制作DLL
- gradle包重名
- ztree系列一 需求分析
- VS2010 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它
- VS2010 查看DLL接口
- 安全加密算法与数据签名总结(2)
- mysql 相关问题
- VS2010 运行时找不到DLL
- PHP学习笔记十一之文件系统(进阶篇)
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
拉达2105
拉达车
拉达汽车图片
小拉达进化
小拉达图片
拉达汽车报价
lada
拉达汽车
拉达尼瓦
斯拉达汽车
哈拉达汽车图片
小拉达
拉钉
钉钉怎么拉人进群
沉头拉钉
沉头铝拉钉
拉勾网首页
拉勾网招聘网站
拉钩图片
拉钩上钓一百年不许变
拉钩表情包
拉钩的图片
拉钩下载
阴道拉钩
拉钩为什么要上吊
钢筋拉钩
拉钩 app
拉钩上吊一百年
钢筋拉钩的作用
工作怎么找
自带货车司机招聘信息
珲春123招聘网
招聘网站有那些
求职招聘网站排行榜
海南在线人才网
应届生论坛
毕业后怎么找工作
一个人怎么找工作
怎么找工作啊
有什么找工作的网站
毕业生如何找工作