如何将动态库(DLL)中的类导出(四)

原创 2007年09月12日 10:08:00
方法3(自己写的)

我想法是先声明个抽象基类,DLL继承这个基类将类给实例化(代码化),并在DLL中导出这个类,EXE只要这个基类,去调用DLL的导出类函数! virtual void sum(int) = 0; 声明一个纯虚函数!这个方法只要一个动态库(DLL)和一个基类文件就可以了!!达到了我预期的要求!

 

基类文件:Test.h

 

//基类

//将这个文件提供给EXE调用

class Test

{

private:

  virtual int  sum(int, int) = 0;

public:

  virtual void ShowMess(char* ) = 0;

  virtual void Count(int) = 0;

};

 

 

DLL文件: DllMain.cpp

//---------------------------------------------------------------------------

 

#include <vcl.h>

#include <windows.h>

//注意加上这个基类的文件

#include "TTest.h"

 

#pragma hdrstop

#pragma argsused

//---------------------------------------------------------------------------

 

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)

{

  return 1;

}

//---------------------------------------------------------------------------

//派生出一个新类Me,来自基类Test

class Me : public Test

{

private:

  virtual int  sum(int, int);

  int sum1(int, int, int);      //只能自己调用(基类中没有的)

public:

  virtual void ShowMess(char* );

  virtual void Count(int);

  void Count1(int);             //只能自己调用(基类中没有的)

};

 

//---------------------------------------------------------------------------

int Me::sum(int a, int b)

{

  return a+b;

}

 

//---------------------------------------------------------------------------

void Me::ShowMess(char* buf)

{

  ShowMessage(buf);

}

 

//---------------------------------------------------------------------------

void Me::Count(int i)

{

  int j = sum(i, i*2);

  ShowMessage(j);

 

  j = sum1(i, i*2, i*3);

  ShowMessage(j);

}

 

//---------------------------------------------------------------------------

int Me::sum1(int a, int b, int c)

{

  return a+b+c;

}

 

//---------------------------------------------------------------------------

void Me::Count1(int i)

{

  int j = sum1(i, i*2, i*3);

  ShowMessage(j);

} 

//---------------------------------------------------------------------------

//导出类函数(得到EXE传来基类的指针地址,所以这里是指针的指针)

extern "C"

{

  __declspec(dllexport) void __stdcall OutClass(Test** MeTest, bool New);

}

//---------------------------------------------------------------------------

 

//---------------------------------------------------------------------------

void __stdcall OutClass(Test** MeTest, bool New)

{

//在这里实现地址的分配与释放

  if (New == true)

  {

    if (*MeTest != NULL)

    {

      delete *MeTest;

      *MeTest = NULL;

    }

    *MeTest = new Me();

    ShowMessage("动态库分配成功");

  }

  else

  {

    delete *MeTest;

    *MeTest = NULL;

    ShowMessage("动态库释放成功");

  }

}

 

相关文章推荐

C++动态库(Dll)的制作,导出类

1、完成类的封装: 如:CMyTestClass类/// CMyTestClass.h头文件中 /**************************************************...
  • bao_bei
  • bao_bei
  • 2016年06月03日 16:24
  • 2028

动态库导出静态库工具(dll2lib.exe)

  • 2011年07月28日 09:35
  • 568KB
  • 下载

DLL(动态库)导出函数名乱码含义

C++编译时函数名修饰约定规则:       __stdcall调用约定:       1、以"?"标识函数名的开始,后跟函数名;         2、函数名后面以"@@YG"标识参数...
  • solo2k
  • solo2k
  • 2016年01月22日 00:54
  • 580

Unity中将c#导出DLL动态库

本文只作为参考,个人水平有限,望见谅! C#导出DLL,一开始就想到了将c++代码做成DLL的方法,各种复制粘贴宏定义,于是就找了一下C#导出DLL的一般方法,和后者如出一折,只是更简单一些,这里我...
  • zzmkljd
  • zzmkljd
  • 2016年10月14日 10:44
  • 879

C#使用EPPlus.dll动态库在一般处理程序中实现将datatable导出到excel

一、.如何安装EPPLus 1.在Visual Studio的解决方案的引用上右键选择管理NeGet程序包 2.在管理NuGet程序包中搜索EPPlus,点击进行安装,安装后便直接添加到引用了...

.NET 使用 MySql.Data.dll 动态库操作MySql的帮助类--MySqlHelper

.NET 使用 MySql.Data.dll 动态库操作MySql的帮助类--MySqlHelper

动态库DLL中类的使用

一、DLL中类的导出 在类名称前增加 _declspec(dllexport)定义,例如: class _declspec(dllexport) CMath{ .... }; 通常使...

ACE简介以及ACE_DLL动态库操作类的使用

http://egeho123.blogbus.com/logs/14071965.html 1 引言 接触ACE已经有长一段时间了,但一直来没有应用的实际需求,因此这方面的学习进展一直很慢,到目...

关于DLL动态库调用

  • 2014年12月01日 14:30
  • 73KB
  • 下载

labview调用dll动态库的方法

  • 2015年02月10日 18:18
  • 330KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: 如何将动态库(DLL)中的类导出(四)
举报原因:
原因补充:

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