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

原创 2007年09月12日 10:09:00
 
EXE文件: Unit1.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("动态库释放成功");
 }
}
 
 
EXE文件: Unit1.h
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//注意加入基类文件
#include "TTest.h"
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
 TButton *Button1;
 TButton *Button2;
 TButton *Button3;
 void __fastcall Button2Click(TObject *Sender);
 void __fastcall Button1Click(TObject *Sender);
 void __fastcall Button3Click(TObject *Sender);
private: // User declarations
 HINSTANCE hInst;
 Test* MyTest; //请注意基类不能实例化,必须用new出来(在DLL中实现了)
 void __fastcall LoadFreeDLL(bool blf=true);
public:       // User declarations
 __fastcall TForm1(TComponent* Owner);
 AnsiString sTemp;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif 
Ø         小结:
以上三种方法全部在C++ Builder6.0编译通过!具体使用哪种方法请大家自己测试!
这是我第一次写文章,如有写得不对得地方请多多指教!我会及时更正错误!
如需要源代码的朋友可以发EM给我!
最后祝CSND越办越红火,大家猴年吉祥!!
 
我的EM:jxwbo@sohu.com
         jx_wbo@sina.com 
 
魏 波
写自深圳
2004年1月15日
 

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

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

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

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

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

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

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

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

Unity中将c#导出DLL动态库

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

.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已经有长一段时间了,但一直来没有应用的实际需求,因此这方面的学习进展一直很慢,到目...

如何将程序的执行文件和静态加载动态库放在不同的目录

一般windows程序的exe和dll需要放在同一个目录,静态加载才不会报错,否则需要修改path环境变量,将所有没有和exe放在同一目录的dll的路径加在path环境变量中。 有没有一种方法不去手...

JAVA使用dll动态库

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

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