您的位置:首页 > 其它

静态链接和动态链接

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 c exe