C/C++——动态链接库
来源:互联网 发布:和风天气api json解析 编辑:程序博客网 时间:2024/06/14 02:53
创建动态链接库
创建Win32,动态链接库dll的项目Win32Dynamic,在文件中添加如下的函数定义:
[Win32Dynamic.h]
#ifndef __HEAD_DYNAMIC#define __HEAD_DYNAMICint __declspec(dllexport) DynamicAdd( int param1, int param2 );#endif
[Win32Dynamic.cpp]
#include "stdafx.h"#include "Win32Dynamic.h"int DynamicAdd( int param1, int param2 ){ return param1 + param2;}
编译成功以后,可以看到输出目录输出了相应的dll:Win32Dll.dll
可以使用VC6.0自带的Depends查看Win32动态导出库的输出内容。
使用动态链接库
创建Win32控制台,动态链接库测试程序Win32DyanmicTest
#include "stdafx.h"// HINSTANCE 声明需要包含该头文件#include "afx.h"typedef int (* Dynamic_AddFunc)( int, int );int _tmain(int argc, _TCHAR* argv[]){ // 使用动态加载的方式调用 HINSTANCE hDll = ::LoadLibrary( "..\\Win32Dynamic\\Debug\\Win32Dynamic.dll" ); if( hDll ) { // 从动态库中寻找该函数 Dynamic_AddFunc pFunc = (Dynamic_AddFunc)::GetProcAddress( hDll, "DynamicAdd" ); if( pFunc ) { printf( "Call DynamicAdd function Dynamic\n" ); printf( "Sum = %d", pFunc( 3, 4 ) ); } else { printf( "Have not found the DynamicAdd function in the dynamic lib\n" ); } } return 0;}
测试结果:
(奇怪我们并没有在动态链接库中找到该函数)
我们再用Depends来看dll导出的函数
函数名Function一栏中我们看到函数名字并不是DynamicAdd,我们修改下我们的GetProcAddress中的参数
\\ ...Dynamic_AddFunc pFunc = (Dynamic_AddFunc)::GetProcAddress( hDll, "?DynamicAdd@@YAHHH@Z" );\\ ...
测试结果:
动态库中的函数正确的被调用了
extern “C”修饰
在之前的项目中我们使用extern “C” 对导出函数进行修饰
( C必须大写 )
[Win32Dynamic.h]
#ifndef __HEAD_DYNAMIC#define __HEAD_DYNAMICextern "C" int __declspec(dllexport) DynamicAdd( int param1, int param2 );#endif
[Win32Dynamic.cpp]
#include "stdafx.h"#include "Win32Dynamic.h"extern "C" int DynamicAdd( int param1, int param2 ){ return param1 + param2;}
再用Depends去看dll中的导出函数的时候,发现函数导出名字正常了
这个时候执行最早的代码的时候程序就能够找到DynamicAdd函数了。
【返回】
C/C++——编程方式
0 0
- C/C++——动态链接库
- c动态链接库
- 【C/C++】静态链接库、动态链接库、extern "C"
- 【C/C++】automake生成动态链接库
- linux C++/C 动态链接库使用
- linux C++/C 动态链接库使用
- C/C++-动态链接库(DLL)
- C/C++——静态链接库
- VS2010 动态库开发——第一章 演练:创建和使用动态链接库 (C++)
- 动态库学习 第1章——演练:创建和使用动态链接库 (C++)
- VS2010 动态库开发——第一章演练:创建和使用动态链接库 (C++)
- VS2010 动态库开发——第一章 演练:创建和使用动态链接库 (C++)
- 创建和使用动态链接库 (C++)
- 标准C调用C++动态链接库
- 创建和使用动态链接库 (C++)
- Java调用c/c++动态链接库
- 建立C语言动态链接库
- 创建和使用动态链接库 (C++)
- Android 四大组件的理解
- 用户数据报协议UDP
- 初试Unity 3D——飞盘射击案例(3)
- 随机的统一理论
- pdb调试python
- C/C++——动态链接库
- awk学习
- linux环境C开发系列3-文件
- 03-makefile函数
- C/C++——编程方式
- h5 部分标签与属性集合
- Java三十个常见面试题总结(一)
- DHCP服务器设计
- java << 左移 >>右移运算终于明白一点了