解析VC中创建DLL,导出全局变量,函数和类的深入分析

   2015-09-11 0
核心提示:本篇文章是对VC中创建DLL,导出全局变量,函数和类进行了详细的分析介绍,需要的朋友参考下
一.创建DLL
1.在VC中新建一个Win32空项目MathLib;
2.添加预编译头文件stdafx.h,定义导入导出控制符号:
复制代码 代码如下:

//stdafx.h
#pragma once
#define MATHLIB_EXPORT

3.添加包含要导出的全局变量,函数和类的头文件MathLib.h:
复制代码 代码如下:

 //MathLib.h
 #pragma once

 #ifdef MATHLIB_EXPORT
 #define MATHLIBAPI __declspec(dllexport)
 #else
 #define MATHLIBAPI __declspec(dllimport)
 #endif

 //macro
 #define PI 3.14149

 //Global variable
 extern MATHLIBAPI int GlobalVariable;

 //Function
 MATHLIBAPI int Add(int a,int b);

 //Class
 class MATHLIBAPI Math
 {
 public:
  int Multiply(int a,int b);
 };

4.添加所导出元素的实现文件MathLib.cpp
复制代码 代码如下:

 //MathLib.cpp
 #include "stdafx.h"
 #include "MathLib.h"

 int GlobalVariable = 100;

 int Add(int a,int b)
 {
  return a+b;
 }

 int Math::Multiply(int a,int b)
 {
  return a*b;
 }

二,测试所创建的DLL
测试代码:
复制代码 代码如下:

 #include "stdafx.h"
 #include <iostream>
 using namespace std;

 #include "../MathLib/MathLib.h"
 #pragma comment(lib,"../Debug/MathLib.lib")

 int _tmain(int argc, _TCHAR* argv[])
 {
  cout<<"Pi = "<<PI<<endl;

  cout<<"GlobalVariable = "<<GlobalVariable<<endl;

  int a = 20,b = 30;
  cout<<"a="<<a<<", "<<"b="<<b<<endl;
  cout<<"a+b = "<<Add(a,b)<<endl;

  Math math;
  cout<<"a*b = "<<math.Multiply(a,b)<<endl;

  return 0;
 }

 
标签: dll 导出函数
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 拓端tecdat|Mac系统R语言升级后无法加载包报错 package or namespace load failed in dyn.load(file, DLLpath = DLLpath, ..
    拓端tecdat|Mac系统R语言升级后无法加载包报错
    问题重现:我需要安装R软件包stochvol,该软件包 仅适用于3.6.0版的R。因此,我安装了R(3.6.0 版本),并使用打开它 RStudio。但是现在  ,即使我成功 使用来 安装软件包,也无法加载任何库 。具体来说,我需要加载的库是stochvol  ,Rcpp和 caret
    03-08
  • 跨语言调用C#代码的新方式-DllExport 跨语言调用本质
    跨语言调用C#代码的新方式-DllExport 跨语言调
    简介上一篇文章使用C#编写一个.NET分析器文章发布以后,很多小伙伴都对最新的NativeAOT函数导出比较感兴趣,今天故写一篇短文来介绍一下如何使用它。在以前,如果有其他语言需要调用C#编写的库,那基本上只有通过各种RPC的方式(HTTP、GRPC)或者引入一层C++
    03-08
  • Delphi 调用DLL外部函数时的指针参数
    某项目需要调用设备厂家提供的DLL的函数,厂家给了一个VB的例子,有个参数是ByRef pBuffer As Single。于是在Delphi中用buffer:array of single代替:function func(buffer:array of single;count:integer):integer;far;stdcall;external 'func.dll';调用后bu
    02-09
  • QT/VS -- 调用matlab的dll文件
    QT/VS -- 调用matlab的dll文件
    Matlab生成dll等文件的步骤之前文章里有,下边写一下VS调用MATLAB生成的dll的方法。(QT调用方法一样)https://www.cnblogs.com/zzzsj/p/14630559.htmlC++部分:创建工程文件,注意:测试环境使用的是64位操作系统,因此务必在x64环境下进行以下配置。(这是
    02-09
  • Delphi 缩放图像代码 - 支持PNG透明通道(利用了Windows的windowscodecs.dll)
    Delphi 缩放图像代码 - 支持PNG透明通道(利用
    要求Delphi2007或者更高版本, 系统要求至少XP-SP2以上实际上是利用了Windows的windowscodecs.dll这个文件的功能在VCL里已经封装为TWICImage类 procedure ScalerImage(AImage: TWICImage; AWidth, AHeight: Word);varnWIF: IWICImagingFactory;nWIS: IWICBitm
    02-09
  • delphi 注册 dcc70.dll
    @echo 开始注册copy dcc70.dll %windir%\system32\regsvr32 %windir%\system32\dcc70.dll /s@echo dcc70.dll注册成功@pause   @echo 开始注册copy dcc70.dll %windir%\SysWOW64\regsvr32 %windir%\SysWOW64\dcc70.dll /s@echo dcc70.dll注册成功@pause @e
    02-09
  • Delphi 在DLL中使用DevExpress控件时出错解决办
    测试环境 DevExpress VCL 14.1.3 和XE7问题:在dll使用cxGrid控件时  如果不添加列标题 则不报错   查询无数据集显示,如果加上标题 就报错了 这段为报错部分function TcxCustomGridTableItem.CanFilter(AVisually: Boolean): Boolean;begin  Result := 
    02-09
  • delphi 调试dll
    delphi 调试dll
    这几天在调试dll遇到的问题主要是无法下断点,根据网上的搜索结果设置也无效,偶然搜索到一条方法,特记录下来以便以后使用。首先按照网上的基本设置: 设置完后发现还是不能调试!关键在于还需要重新编译需要调试的dll随意的修改一行代码,然后编译再运行就
    02-09
  • Delphi Dll
    Delphi Dll
    引 言 相信有些计算机知识的朋友都应该听说过"DLL"。尤其是那些使用过windows操作系统的人,都应该有过多次重装系统的"悲惨"经历——无论再怎样小心,没有驱动损坏,没有病毒侵扰,仍然在使用(安装)了一段时间软件后,发现windows系统越来越庞大,操作越来
    02-09
  • delphi 创建DLL文件 及其调用和注意事项
    首先创建一个DLL文件,项目自带的代码为:library ProjectPnr;{ Important note about DLL memory management: ShareMem must be thefirst unit in your library's USES clause AND your project's (selectProject-View Source) USES clause if your DLL expo
    02-09
点击排行