zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    .NET Interop 工具集
    关于正弦波的算法
    Windows Phone 系列 本地数据存储
    Xaml cannot create an instance of “X”
    Windows Phone 系列 使用 MVVM绑定时无法获取当前值
    Windows Phone 系列 应用程序图标无法显示
    Windows Phone 系列 WPConnect无法上网的问题
    Windows Phone 系列 使用 Windows Phone 保存铃声任务
    WP7.5提交应用
    Windows Phone 系列 动态删除ObservableCollection
  • 原文地址:https://www.cnblogs.com/zhangmo/p/2607032.html
Copyright © 2011-2022 走看看