静态链接和动态链接
2012-09-13 16:31
225 查看
静态加载Dll:
dll工程B:
项目属性->配置属性->常规->配置类型:动态库(.dll);
在声明文件中,声明导出函数:__declspec(dllexport) XXX( int XX);
如果是c文件,要在C++文件中被调用,注明extern "C";(可以 #ifdef __cplusplus extern "C" { #endif)
调用dll的主工程A:
项目属性->配置属性->常规->配置类型:应用程序(.exe);
项目文件中:#pragma comment(lib, "../XX/debug/XX.lib") (注:此为dll工程中lib文件地址)
将dll工程中生成的dll和lib文件拷贝到主工程A的当前文件夹下,以备调用。
在要导入的声明文件下注明:__declspec(dllimport) XXX( int XX);
头文件;
静态加载Lib:
1、lib工程B:
项目属性->配置属性->常规->配置类型:静态库(.lib);
在声明文件中,声明导出函数:__declspec(dllexport) XXX( int XX);(可以省略)
如果是c文件,要在C++文件中被调用,注明extern "C";(可以 #ifdef __cplusplus extern "C" { #endif)
调用lib的主工程A:
项目属性->配置属性->常规->配置类型:应用程序(.exe);
项目文件中:#pragma comment(lib, "../XX/debug/XX.lib") (注:此为lib工程中lib文件地址)
或者,在项目配置中:项目属性->配置属性->链接器->输入->附加依赖项:XX.lib; 附加库目录:XX(B
工 程中lib文件所在位置)
在要导入的声明文件下注明:__declspec(dllimport) XXX( int XX);(可以省略)
头文件;
2、在调用工程中直接添加lib文件,添加头文件,进行接口调用;
ps:
LoadLibrary 一般是动态加载DLL时(你并不需要对应的头文件?,和LIB)
动态加载就是代码中LoadLibrary,GetProcAddress来调用函数,只需要h和dll就够了,而且可以FreeLibrary,这样可以动态变化,不会一直占用进程的内存空间,方便控制,一般都是使用这个了。
#pragma comment 一般是静态加载DLL时(对应的头文件、DLL,和LIB缺一不可,并且生产的EXE没有找到DLL文件就会导致“应用程序初始化失败”)
静态加载自动link进去了,调用的时候,只需要在别的工程中包含对应的h,lib文件,然后就可以直接调用了,实际运行的时候,把对应的dll放到当前路径等。
dll工程B:
项目属性->配置属性->常规->配置类型:动态库(.dll);
在声明文件中,声明导出函数:__declspec(dllexport) XXX( int XX);
如果是c文件,要在C++文件中被调用,注明extern "C";(可以 #ifdef __cplusplus extern "C" { #endif)
调用dll的主工程A:
项目属性->配置属性->常规->配置类型:应用程序(.exe);
项目文件中:#pragma comment(lib, "../XX/debug/XX.lib") (注:此为dll工程中lib文件地址)
将dll工程中生成的dll和lib文件拷贝到主工程A的当前文件夹下,以备调用。
在要导入的声明文件下注明:__declspec(dllimport) XXX( int XX);
头文件;
静态加载Lib:
1、lib工程B:
项目属性->配置属性->常规->配置类型:静态库(.lib);
在声明文件中,声明导出函数:__declspec(dllexport) XXX( int XX);(可以省略)
如果是c文件,要在C++文件中被调用,注明extern "C";(可以 #ifdef __cplusplus extern "C" { #endif)
调用lib的主工程A:
项目属性->配置属性->常规->配置类型:应用程序(.exe);
项目文件中:#pragma comment(lib, "../XX/debug/XX.lib") (注:此为lib工程中lib文件地址)
或者,在项目配置中:项目属性->配置属性->链接器->输入->附加依赖项:XX.lib; 附加库目录:XX(B
工 程中lib文件所在位置)
在要导入的声明文件下注明:__declspec(dllimport) XXX( int XX);(可以省略)
头文件;
2、在调用工程中直接添加lib文件,添加头文件,进行接口调用;
ps:
LoadLibrary 一般是动态加载DLL时(你并不需要对应的头文件?,和LIB)
动态加载就是代码中LoadLibrary,GetProcAddress来调用函数,只需要h和dll就够了,而且可以FreeLibrary,这样可以动态变化,不会一直占用进程的内存空间,方便控制,一般都是使用这个了。
#pragma comment 一般是静态加载DLL时(对应的头文件、DLL,和LIB缺一不可,并且生产的EXE没有找到DLL文件就会导致“应用程序初始化失败”)
静态加载自动link进去了,调用的时候,只需要在别的工程中包含对应的h,lib文件,然后就可以直接调用了,实际运行的时候,把对应的dll放到当前路径等。
相关文章推荐
- 动态链接,静态链接,动态链接库,静态链接库
- 关于动态链接与静态链接
- 动态链接和静态链接的区别
- 15.动态链接及静态链接
- 编译有哪些阶段,动态链接和静态链接的区别 c++
- GCC编译时会先查动态链接再查静态链接
- Linux 动态链接和静态链接简析(库名与库文件名)
- 动态链接和静态链接的区别
- 动态链接及静态链接
- 静态库 动态库 静态链接 动态链接 编译器cl.exe 链接器link.exe
- 动态链接DLL与静态链接LIB
- 提高google排名之:将动态网页链接转换成静态链接
- linux下动态链接和静态链接
- 动态链接与静态链接
- 定制动态链接和静态链接
- 动态链接和静态链接的区别
- 静态链接与动态链接的区别
- CodeBlocks静态链接与动态链接设置
- ATL 静态链接 动态链接 出错处理
- C++函数动态链接库及静态链接