静态加载dll和动态加载dll

原创 2012年03月26日 11:23:16

一,首先编写DLL (建win32空DLL工程)

头文件.h

 

extern "C" _declspec(dllexport) int Max(int a, int b);         //extern "C"解决函数名由于不同编译器造成的名字匹配问题,通常c++编译器编译时会对函数进行改名,而c编译器不会
extern "C" _declspec(dllexport) int Min(int a, int b);         //_declspec(dllexport)说明该函数为导出函数

 

实现文件.cpp

#include"TestDLL.h"
int Max(int a, int b)
{
 return (a > b?a:b);
}
int Min(int a, int b)
{
 return (a > b?b:a);
}

 

二,编程测试DLL的工程(建win32 空工程)

1,静态加载dll

a。将dll工程下的dll和lib文件拷到测试工程下

b。同时编写头文件.h

extern "C" _declspec(dllimport) int Max(int a, int b);           //_declspec(dllimport)说明函数为导入函数
extern "C" _declspec(dllimport) int Min(int a, int b);

c。编写实现文件.cpp

#include "test.h"
#include <iostream>
using namespace std;
#pragma comment(lib,"TestDLL001.lib")
int main()
{
 int a=Min(3,4);
 cout<<a<<endl;
 system("pause");
 return 0;
}

 

2.动态加载dll(仅用包含dll文件,同时不需要.h文件和lib文件)

a。将dll工程下的dll文件拷贝到测试工程下

b。编写实现文件.cpp

#include <Windows.h>                  // 包含 HINSTANCE
#include <iostream>
using namespace std;

int main()
{
 HINSTANCE his = LoadLibraryA("TestDLL001.dll");                    //用于加载dll
 typedef int(*pmin)(int a, int b);         
 pmin mmi=(pmin)GetProcAddress(his, "Min");                  //GetProcAddress()用于获得函数地址
 int aa=mmi(3,4);
 cout<<aa<<endl;
 FreeLibrary(his);                                                   //释放dll
 system("pause");
 return 0;
}

 

 

 

 

 

 

 

dll动态加载的方式

动态调用动态库步骤:1、创建一个函数指针,其指针数据类型要与调用的DLL引出函数相吻合。2、通过Win32 API函数LoadLibrary()显式的调用DLL,此函数返回DLL的实例句柄。3、通过W...
  • FreeBot
  • FreeBot
  • 2009年07月01日 10:43
  • 25776

动态链接库DLL的加载:隐式加载(载入时加载)和显式加载(运行时加载)

静态链接库在链接时,编译器会将 .obj 文件和 .LIB 文件组织成一个 .exe 文件,程序运行时,将全部数据加载到内存。 如果程序体积较大,功能较为复杂,那么加载到内存中的时间就会比较长,最...

静态与动态加载Dll [示例代码]

1、DLL源代码 MyDll.h//////////////////////////////////////////////////////////////////////////// MyDll.h...

静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件。

静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件。 一、 静态链接库(LIB,也简称“静态库”)与动态链接库(DLL,也简称“动态库”)的区别     静...
  • iw1210
  • iw1210
  • 2014年06月09日 20:39
  • 10040

使用LoadLibrary动态加载DLL并使用其中的类

DLL - 头文件和导出方法class IDLLIFsWrap { public: virtual void DeleteSelf(void) = 0; virtual int Add...
  • hetoby
  • hetoby
  • 2016年07月18日 14:46
  • 2256

动态链接库dll的 静态加载 与 动态加载

dll 两种链接方式  : 动态链接和静态链接(链接亦称加载) 动态链接是指在生成可执行文件时不将所有程序用到的函数链接到一个文件,因为有许多函数在操作系统带的dll文件中,当程序运行时直接...

关于VS中静态调用dll的一些问题

在静态调用dll时,只需要在代码中加入 #pragma comment(lib, "E:\\test.lib") 就可以正确编译,而只有程序运行时才会载入相应的test.dll。为了方便调试,通常...

VS 2015 DLL的创建、静态调用和动态调用

DLL的创建创建步骤文件 -> 新建 -> 项目 -> “新建项目”对话框 -> “已安装” -> 模板 -> 其他语言 -> Vistual C++ -> Win32 控制台应用程序。在”Win32...

c语言怎么调用dll文件

from:http://zhidao.baidu.com/question/479621352.html   dll调用: (1)一般动态链接库有头文件声明h文件,lib,dll;这三个文件都用...

c语言创建dll,c语言调用dll

一 c语言创建dll
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:静态加载dll和动态加载dll
举报原因:
原因补充:

(最多只允许输入30个字)