zoukankan      html  css  js  c++  java
  • 一个VC中的DLL导出类的例子

    思路:
        a   把需要用到的接口写入到一个虚基类中;   
        b   需要导出的类从此虚基类中派生;   
        c   写一个全局函数,在此函数中创建导出类,然后返回类指针,然后将此全局函数导出。

    实现:
    dll项目中包含文件:basevirtualstruct.h,myclass.h,myclass.cpp等3个文件。3个文件列表内容如下:
    //文件basevirtualstruct.h
    struct basevirtualstruct
    {
       virtual float add(float a,float b)=0;
    };

    //文件myclass.h
    #include "basevirtualstruct.h"

    class Myclass: public basevirtualstruct
    {
    public:
      Myclass(void);
    public:
      ~Myclass(void);
    public:
       float add(float a,float b);
    };

    //Myclass.cpp
    #include "Myclass.h"
    Myclass::Myclass(void)
    {
    }
    Myclass::~Myclass(void)
    {
    }
    int Myclass::add(float a,float b)
    {
      return a+b;
    }

    extern "C" __declspec basevirtualstruct* createMyclass()
    {
       return new Myclass();
    }

    完成上述代码后,编译,将产生的dll文件,以及两个头文件拷贝到要使用的工程目录下,然后在工程中做如下修改:
    头文件中添加:
    #include "basevirtualstruct.h"
     typedef basevirtualstruct * (* LPFUNC)();

    实现文件中添加:
     HINSTANCE hDLL = LoadLibrary(_T("dll文件名不带后缀")); 
     if (hDLL != NULL)
     {
       TRACE(_T("加载DLL文件成功!"));
       LPFUNC lpFunc = (LPFUNC)GetProcAddress(hDLL, "createMyclass");
       if (!lpFunc)
       {
         FreeLibrary(hDLL);
         TRACE(_T("获取函数地址失败!"));
         return;
      }
      else
      {
                 TRACE(_T("获取函数地址成功!"));
           basevirtualstruct* bvs= lpFunc();
           CString str;
           str.Format(_T(%f"), bvs->add(5,25));
           TRACE(str);
           FreeLibrary(hDLL);
           return;
        }
     }

    运行成功截图:

  • 相关阅读:
    Swift代码实现加载WEBVIEW
    android 图片压缩
    Android图片压缩(质量压缩和尺寸压缩)
    Android压缩图片到100K以下并保持不失真的高效方法
    android图片压缩的3种方法实例
    几种颜色模型的转换公式
    RGB HSV HLS三种色彩模式转换(C语言实现)
    由RGB到HSV颜色空间的理解
    BZOJ 1052 HAOI2007 覆盖问题 二分法答案+DFS
    插入排序算法
  • 原文地址:https://www.cnblogs.com/mingzhao810/p/2882286.html
Copyright © 2011-2022 走看看