动态链接库-实现

原创 2004年09月15日 08:59:00

静态链接

 

平台: WINDOWS2000/XP

工具: VC++ 6.0

创建步骤:

1. 新建项目: WIN32 STATIC LIBRARY;

2 选择PRE-COMPLILED HEADER;

3 编辑头文件和实现文件;

4 编译, 生成LIB文件;

参考代码:

//sum.h

#ifndef MYSUM

#define MYSUM

extern "C"

{

       int Sum(int n);

}

#endif

//sum.cpp

#include "stdafx.h"

#include "sum.h"

 

int Sum(int n)

{

       int iRet = 0;

       for (int i=1;i<=n;i++)

       {

         iRet += i;

       }

       return iRet;

}

测试步骤:

1 新建一个WIN32 console 工程;

2 加入函数调用;

3 向工程中加入头文件和LIB文件;

4 编译,运行;

参考代码:

//main.cpp

#include "sum.h"

#include

int main()

{

       printf("%d", Sum(n));

       return 0;

}

 

WIN32动态链接

 

创建步骤:

1 新建项目: WIN32 DLL;

2 编辑头文件和实现文件;

3 编译, 生成LIB文件和DLL文件;

参考代码:

//sum.h

#ifdef __cplusplus

extern "C"

{

#endif

 

#ifdef SUM_EXPORTS

#define SUM_API __declspec(dllexport)

#else

#define SUM_API __declspec(dllimport)

#endif

 

SUM_API       int Sum(int n);

#ifdef __cplusplus

}

#endif

//sum.cpp

#define SUM_EXPORTS

#include "sum.h"

 

int Sum(int n)

{

       int iRet = 0;

      for (int i = 1; i <= n ; i++)

       {

         iRet += i;

       }

       return iRet;

}

测试步骤:

1 新建一个WIN32 console 工程;

2 加入函数调用;

3 向工程中加入头文件和LIB文件;

4 DLL文件放在可执行文件同一目录下

5 编译,运行;

静态装入参考代码:

//main.cpp

#include "sum.h"

#include "stdio.h"

 

int main(void)

{

       printf("%d", Sum(100));

       return 0;

}

 

动态装入参考代码:

//main.cpp

#include "sum.h"

#include "stdio.h"

#include

typedef int (*PFUNC)(int);

 

int main(void)

{

       HINSTANCE hLib = ::LoadLibrary("dll");

       if(hLib != NULL)

       {

              PFUNC pFunc = (PFUNC) ::GetProcAddress(hLib, "Sum");

              if(pFunc != NULL)

              {

                     printf("%d", pFunc(100));

              }

              else

                     printf("Function Not Found!");

 

       }

       else

       {

              printf("Library Not Found!");

       }

 

       return 0;

}

 

 

 

 

 

DLL中导出类和成员函数

创建步骤:

1 新建项目: WIN32 DLL;

2 编辑头文件和实现文件;

3 编译, 生成LIB文件和DLL文件;

//cfoo.h

#ifdef CDLL_EXPORTS

#define CDLL_API __declspec(dllexport)

#else

#define CDLL_API __declspec(dllimport)

#endif

 

class CDLL_API CFoo {

public:

       void Hello(void);

};

 

//cfoo.cpp

#include "stdafx.h"

#include "cfoo.h"

#include

 

void CFoo::Hello()

{

       std::cout << "Hello DLL!" << std::endl;

}

测试步骤:

1 新建一个WIN32 console 工程;

2 加入函数调用;

3 向工程中加入头文件和LIB文件;

4 DLL文件放在可执行文件同一目录下

5 编译,运行;

//main.cpp

#include "cfoo.h"

 

int main(void)

{

       CFoo f;

       f.Hello();

 

       return 0;

}

 

使用MFC扩展DLL

 

假设要导出一个对话框,要修改的代码:

#ifndef _AFXEXT

#define IDD_EXT_NAME 129

#else

#include "resource.h"

#endif

 

class AFX_EXT_CLASS CNameDlg : public Cdialog

{…}

 

linux c/c++插件技术:动态链接库

一.概述 插件技术的目的是为了更好的扩展性.动态链接库是其中 一种实现方式. 这里主要论述几个问题. 1)linux上关于这些api的描述.看完linux上关于dlopen等函数的描述基本就可以写出简...
  • cdhql
  • cdhql
  • 2014年12月18日 20:06
  • 3286

linux三种方式使用库:静态链接库,动态链接库,动态加载库

+++原理+++ linux调用库的方式有三种: 1、静态链接库 2、动态链接库 3、动态加载库 动态链接库(共享库)和动态加载库文件没有任何区别,唯一区别是:动态链接库是程序运行一开始就要加载库,动...
  • u014132659
  • u014132659
  • 2016年08月19日 16:41
  • 3425

Linux下实现C++类的动态链接

介绍动态链接库的C API,C++类的动态链接以及相关的坑
  • chosen0ne
  • chosen0ne
  • 2013年08月17日 16:01
  • 4839

C++ 动态链接库实现实例及解释

  • 2015年05月13日 11:46
  • 747KB
  • 下载

使用Inno setup 制作安装包 安装包脚本调用动态链接库实现特殊处理

  • 2017年11月29日 11:42
  • 1.21MB
  • 下载

动态链接库实现完整导出整个类

  • 2013年11月07日 14:08
  • 17KB
  • 下载

DLL动态链接库的实现及调用(VC++,Delphi)

  • 2015年12月22日 13:10
  • 2.4MB
  • 下载

C++动态链接库的实现

  • 2009年08月18日 10:16
  • 5.85MB
  • 下载

C# 调用Matlab编译的动态链接库dll 实现了mschart画图

  • 2012年05月05日 21:46
  • 2.62MB
  • 下载

动态链接库实现回车键自动转换焦点

  • 2010年07月02日 23:50
  • 1.75MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态链接库-实现
举报原因:
原因补充:

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