关于lib 和 dll 个人学习总结
来源:互联网 发布:李泽楷双胞胎残障 知乎 编辑:程序博客网 时间:2024/05/17 04:05
首先,我先推荐一篇个人觉得比较好的文章:
http://www.cppblog.com/amazon/archive/2009/09/04/95318.html
关于导出函数和导出类,其实都差不多,导出函数将 __declspec()的声明放在前面,而类放在中间,即
extern "C" DLLAPI void Print(char *p); //后面会看到DLLAPI 的定义
extern "C" class DLLAPI MyClass{
///关于MyClass 的声明
};
写了一个测试的dll,工程名为 Dll001 .添加头文件,添加cpp, 如取名为 Mytestdll
头文件如下:
#include "stdafx.h"#include "stdio.h"#ifndef MY_DLL_H#define MY_DLL_H#if DLL001_EXPORTS//此处的DLL001_EXPORTS为个人工程所定义,在项目->Dll001属性->配置属性->C/C++->预处理器中可以查到#define DLLAPI __declspec(dllexport)#else#define DLLAPI __declspec(dllimport)#endifextern "C" DLLAPI void Print(char *p);//extern "C" 防止C++对函数根据自己的规则重命名。如果被C++重命名过后,使用动态加载会出现找不到函数的情况,因为名字已经被编译器内部根据自己的规则修改而不能正确匹配函数名。建议不管那么多,都加上#endifcpp如下:
#include "stdafx.h"#include "Mytestdll.h"extern "C" void Print(char *p){printf(p);}
然后生成解决方案。分别使用隐式连接和显示连接。隐式连接需要 Dll001.lib Dll001.dll 和 Mytestdll.h。
将Dll001.lib Dll001.dll 和 Mytestdll.h 拷贝到测试项目目录下面。测试项目代码如下:
// Test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "Mytestdll.h"#pragma comment(lib,"Dll001.lib")int main(){ Print("is right?"); return 0;}
</pre><pre>
显示连接(只需要Dll001.dll ,载入dll的函数LoadLibrary 和查询需要使用的函数地址的函数GetProcAddress ,不需要头文件和lib文件):
// Test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "windows.h"typedef void(*pFunc)(char *);int main(){pFunc p;HINSTANCE hinst = LoadLibraryA("Dll001.dll");p = (pFunc)GetProcAddress(hinst, "Print");p("is right?");return 0;}
得到的结果都是一样。
一般将dll放在工程目录下面,系统查找dll的顺序是
(1)包含EXE文件的目录
(2)工程目录
(3)Windows系统目录
(4)Windows目录
(5)列在Path环境变量中的一系列目录
0 0
- 关于lib 和 dll 个人学习总结
- 关于lib和dll
- 关于lib和dll
- 关于LIB和DLL
- 关于DLL和LIB
- 关于lib和dll
- 关于.h .lib .dll的总结
- [转载] 关于lib 和 dll 的作用
- 关于lib文件 和 DLL文件
- 关于.lib和.dll的一点说明
- dll和lib的相关问题总结
- 关于 lib 与dll
- dll与lib总结
- 说说Lib和Dll
- dll和lib
- LIB和DLL
- lib和dll
- DLL和LIB综述
- Facebook网络模拟测试工具ATC使用
- 数据链路层协议
- hadoop中partition浅析
- Selenium Webdriver元素定位的八种常用方式
- android webView js方法和java 方法交互
- 关于lib 和 dll 个人学习总结
- OpenDaylight项目:预期标准化战争的结束
- python 高级特性
- 手动编译安装LAMP架构,并且实现nagios图形化监控(八)
- Java生成数据
- 关于Surface,Window,View,SurfaceView,Bitmap的理解
- TCP慢启动、拥塞避免、快速重传、快速回复
- APK签名校验绕过
- 浅谈无缓存I/O操作和标准I/O文件操作区别 (转载)