VC++6.0如何创建与调用动态链接库(dll)

VC++支持的DLL:

DLL的编制与具体的编程语言及编译器无关,动态链接库随处可见,VC++支持三种DLL:非MFC动态库、MFC规则DLL和MFC扩展DLL。DLL导出函数(或变量、类)可供应用程序调用;DLL内部函数只能在DLL程序内使用,应用程序无法调用它们。 

导出函数的声明方式: 

一种在函数声明类型和函数名之间加上“_declspec(dllexport)”。 

另外一种采用模块定义(.def)文件声明,需要在库工程中添加模块文件,格式如下: 

LIBRARY 库工程名称 

EXPORTS 导出函数名 

DLL的调用方式: 

一种静态调用,由编译系统完成对DLL的加载和应用程序结束时DLL的卸载。 

另外一种动态调用,由编程者用API函数加载和卸载DLL(DLL加载—DLL函数地址获取—DLL释放)方式。 

示例: 

一、 函数—-创建动态链接库(MFC规则DLL) 

1. New–projects–MFC AppWizard(dll)–Regular DLL using shared MFC DLL //取名为MFC_dll 

2. def文件中添加:函数名(Add_new) 

3. h文件中添加:外部函数声明//求和函数,函数名为Add_new 

extern “C” __declspec(dllexport) int __stdcall Add_new(int a,int b); 

4. cpp文件中添加: 外部函数实现 

extern “C” __declspec(dllexport) int __stdcall Add_new(int a,int b) 

{

  return a+b;

5. build–set active configuration–win32 release–ok 

6. 生成 

7. 根目录下release文件夹中dll,lib与根目录下h文件即为所需

二、 函数—-调用动态链接库(把MFC_dll.dll和MFC_dll.lib拷到工程所在目录) 

//静态调用(.h可以写到.cpp文件中) 

1. new–projects–win32 console application–an empty project 

2. 添加h文件:(test.h) 

#pragma comment(lib,”MFC_dll.lib”) //告诉编译器DLL相对应的lib文件所在路径和文件名 

extern “C”_declspec(dllimport) int _stdcall Add_new(int a,int b);//声明导入函数 

3. 添加cpp文件:(main.cpp) 

#include “test.h” 

int main() 

  cout<<Add_new(10,3); 

  return 0; 

}

//动态调用 

#include <stdio.h> 

#include <windows.h> 

typedef int (* lpAddFun)(int ,int);//定义一个与Add_new函数接受参数类型和返回值均相同的函数指针类型 

int main() 

  HINSTANCE hDll;//句柄 www.2cto.com 

  lpAddFun addFun;//函数指针 

  hDll=LoadLibrary(“dllTest.dll”);//动态加载DLL模块句柄 

  if(hDll) 

  { 

    addFun=(lpAddFun) GetProcAddress(hDll,”Add_new”);//得到所加载DLL模块中函数的地址 

    if(addFun) 

    { 

      int result=addFun(2,3); 

      printf(“%d”,result); } FreeLibrary(hDll);//释放已经加载的DLL模块 

    } 

  return 0; 

}

 from:http://www.2cto.com/kf/201112/112977.html

原文地址:https://www.cnblogs.com/zhangmo/p/2607032.html