zoukankan      html  css  js  c++  java
  • 23.windows库程序(三)

    1.动态库中的类

      (1)DLL中类的导出

         在类名称前添加 _declspec(dllexport),例如:

           class _declspec(dllexport) CMath{ ... };

         通常使用预编译开关切换类的导入导出定义,例如:

           #ifdef  DLLCLASS_EXPORT

           #define  EXT_CLASS  _declspec(dllexport)  //dll

           #else

           #define  EXT_CLASS  _declspec(dllimport)  //使用

           #endif

           class  EXT_CLASS  CMsth{ ... };

      (2)使用

         a.导入dll的lib

         b.类的定义

         c.使用类

      (3)动态库的程序入口

         入口程序不是dll必须的,常用于dll内部初始化或善后处理。

         BOOL  WINAPI  DllMain( HINSTANCE  hinstDll,      //动态库实例句柄

                      DWORD       fdwReason,     //被调用的原因

                                                 LPVOID        lpvReserved);  //保留值

         成功,返回TRUE,表示动态库加载成功。

         动态库的加载或卸载时会被调用。例如:在LoadLibrary和FreeLibrary时会被调用。

      相关代码:

      (1)库头文件 

    #ifndef DLLCLASS_H
    #define DLLCLASS_H
    
    #ifdef DLLCLASS_EXPORT
    #define EXT_CLASS _declspec(dllexport)
    #else
    #define EXT_CLASS _declspec(dllimport)
    #endif
    
    class EXT_CLASS CMath
    {
    public:
        int Add(int a, int b);
        int Sub(int a, int b);
    };
    
    #endif

      (2)库实现文件

    #define DLLCLASS_EXPORT
    #include "windows.h"
    #include "DllClass.h"
    #include "stdio.h"
    
    int CMath::Add(int a, int b)
    {
        return a + b;
    }
    
    int CMath::Sub(int a, int b)
    {
        return a - b;
    }
    
    BOOL CALLBACK DllMain(HINSTANCE hinstDll, DWORD fdwReasion, LPVOID pVoid)
    {
        switch (fdwReasion)
        {
        case DLL_PROCESS_ATTACH:
            //初始化工作
            printf("Loading...
    ");
            break;
        case DLL_PROCESS_DETACH:
            //善后处理
            printf("Unloading...
    ");
            break;
        }
        return TRUE;
    }

      (3)使用

    #include <iostream>
    #include "../DllClass/DllClass.h"
    
    #pragma comment(lib, "../Debug/DllClass.lib")
    
    int main()
    {
        CMath math;
        int sum = math.Add(5, 2);
        int sub = math.Sub(5, 2);
        std::cout << "sum=" << sum << std::endl << "sub=" << sub << std::endl;
        return 0;
    }

      运行结果:

      

  • 相关阅读:
    一个使用 Python 的人工智能聊天机器人框架
    【TensorFlow 官网 可以直接访问】让中国开发者更容易地使用TensorFlow打造人工智能应用
    Object Relational Tutorial 对象关系教程
    Automap sqlalchemy.ext.automap 自动映射数据库表结构
    回溯法
    子集树和排列树
    平衡树
    二叉查找树
    graphviz使用
    linux进程内存布局
  • 原文地址:https://www.cnblogs.com/csqtech/p/5660877.html
Copyright © 2011-2022 走看看