VS2010中 C++创建DLL图解

一、DLL的创建 
创建项目: Win32->Win32项目,名称:MyDLL


选择DLL (D) ->完成.

1、新建头文件testdll.h
testdll.h代码如下:

#ifndef TestDll_H_
#define TestDll_H_
#ifdef MYLIBDLL
#define MYLIBDLL extern "C" _declspec(dllimport) 
#else
#define MYLIBDLL extern "C" _declspec(dllexport) 
#endif
MYLIBDLL int Add(int plus1, int plus2);
//You can also write like this:
//extern "C" {
//_declspec(dllexport) int Add(int plus1, int plus2);
//};
#endif


------------------------------------------------------

testdll.h也可以写为:

#pragma once

#ifndef __AFXWIN_H__

    //........

#endif

#include<string>

using namespace std;

//数据、类型定义等

#define OUTAPI __declspec(dllexport)

OUTAPI int Add(int a, int b);



2、新建源文件testdll.cpp
testdll.cpp代码如下:

#include "stdafx.h"
#include "testdll.h"
#include <iostream>
using namespace std;
int Add(int plus1, int plus2)
{
int add_result = plus1 + plus2;
return add_result;
}




3、新建模块定义文件mydll.def
mydll.def代码如下:

LIBRARY "MyDLL"
EXPORTS
Add   @1


4、vs2010自动创建dllmain.cpp文件,它定义了DLL 应用程序的入口点。

dllmain.cpp代码如下:
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
      )
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
  break;
}
return TRUE;
}

最后,编译生成MyDLL.dll文件和MyDLL.lib文件。



1>------ 已启动生成: 项目: MyDLL, 配置: Debug Win32 ------

1>  dllmain.cpp

========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========

 

1>------ 已启动生成: 项目: MyDLL, 配置: Debug Win32 ------

1>  stdafx.cpp

1>  testdll.cpp

1>  MyDLL.cpp

1>  正在生成代码...

1>     正在创建库 D:\Visual C++\工程\Libaray\MyDLL\Debug\MyDLL.lib 和对象 D:\Visual C++\工程\Libaray\MyDLL\Debug

【生成的DLL用DLL查看器,看到的导出函数名:Add,没有多余的奇怪字符】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用公用表表达式的递归查询

微软从SQL2005起引入了CTE(Common Table Expression)以强化T-SQL。公用表表达式 (CTE) 具有一个重要的长处&#xff0c;那就是可以引用其自身。从而创建递归 CTE。递归 CTE 是一个反复运行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。 当某个查询引用递归 CTE 时…

C#委托实现C++ Dll中的回调函数

from:https://blog.csdn.net/ferrycooper/article/details/63261771很多的Dll都是C和C写的&#xff0c;那么如果C#想要调用Dll中的函数怎么办&#xff0c;尤其是Dll函数其中一个参数是函数指针的&#xff0c;即里面有回掉函数的用C#怎么实现&#xff1f; C中的回掉函数在C#中有…

15个最好的HTML5前端响应式框架(2014)

文中的多个框架基于SASS创建&#xff0c;SCSS是一种比LESS更简洁的样式表编程语言&#xff0c;它能够编绎成CSS&#xff0c;可复用CSS代码&#xff0c;声明变量&#xff0c;甚至是函数&#xff0c;类Ruby/Python的语法。參见&#xff1a; LESS vs SASS&#xff1f;选择哪种CSS样…

【转载】Direct3D基础知识

原文&#xff1a;Direct3D基础知识 重新从头开始学习DX,以前太急于求成了,很多基础知识都没掌握就开始写程序了,结果出了问题很难解决.1. D3D体系结构D3D与GDI处与同一层次,区别在于,D3D可以使用HAL(Hardware Abstraction Layer)通过DDI来访问图形硬件,充分发挥硬件性能.…

关于Xcode隐藏打印的logs的方法

https://www.cnblogs.com/jukaiit/p/5881062.html 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 添加参数&#xff1a; Name &#xff1a;OS_ACTIVITY_MODE Value : disable

指针函数与函数指针的区别

首先它们之间的定义&#xff1a;1、指针函数是指带指针的函数&#xff0c;即本质是一个函数&#xff0c;函数返回类型是某一类型的指针。 类型标识符 *函数名(参数表)int *f(x&#xff0c;y);首先它是一个函数&#xff0c;只不过这个函数的返回值是一个地址值。函数返回值必须用…

C++走向远洋——63(项目二2、两个成员的类模板)

*/ * Copyright (c) 2016&#xff0c;烟台大学计算机与控制工程学院 * All rights reserved. * 文件名&#xff1a;text.cpp * 作者&#xff1a;常轩 * 微信公众号&#xff1a;Worldhello * 完成日期&#xff1a;2016年6月4日 * 版本号&#xff1a;V1.0 * 问题描述&…

iOS 抓包工具 charles工具

在Charles官网下载最新的 安装包 在电脑上安装完成之后&#xff0c;以 注册码 Registered Name: https://zhile.io License Key: 48891cf209c6d32bf4 进行注册即可完成 在手机上面设置代理&#xff1a;输入电脑的网络IP以及端口号 以下为查找的步骤&#xff1a; 在手机上手…

写一个Android输入法01——最简步骤

本文演示用Android Studio写一个最简单的输入法。界面和交互都很简陋&#xff0c;只为剔肉留骨&#xff0c;彰显写一个Android输入法的要点。 1、打开Android Studio创建项目&#xff0c;该项目和普通APP的不同之处在于它不需要添加任何Activity&#xff1a;我给该输入法命名为…

谈谈自己对于Auth2.0的见解

Auth的原理网上有很多&#xff0c;我这里就不在赘述了。 这里有张时序图我个人觉得是比较合理而且直观的&#xff0c;&#xff08;感谢这篇博文&#xff1a;http://justcoding.iteye.com/blog/1950270&#xff09; 参照这个流程&#xff0c;模拟了下部分代码&#xff0c;当然是…

iPad开发--QQ空间,处理横竖屏布局,实现子控件中的代理

一.主界面横竖屏效果图 二.主界面加载, 初始化Dock(红色框的控件),判断程序启动时的屏幕方向.调用自己- (void)transitionToLandScape:(BOOL)isLandScape;方法,通知子控件屏幕方向改变,将此事件一直传递下去程序运行过程中屏幕方向改变会调用- (void)viewWillTransitionToSize:…

C++ Vector 汇总

C vector erase函数最近使用了顺序容器的删除元素操作&#xff0c;特此记录下该函数的注意事项。 在Cprimer中对c.erase(p) 这样解释的&#xff1a;c.erase(p) 删除迭代器p所指向的元素&#xff0c;返回一个指向被删元素之后元素的迭代器&#xff0c;若p指向尾元素&#xff…

vNext之旅(2):net451、dotnet5.4、dnx451、dnxcore50都是什么鬼

继上次”vNext之旅&#xff08;1&#xff09;&#xff1a;从概念和基础开始”之后再次学习vNext重新遇到了弄不懂的事情&#xff0c;花了一些时间学习&#xff0c;今天来分享一下&#xff0c;为后人节省些时间。起因 在用vNext造轮子——框架的时候引入“Microsoft.Dnx.Runtime…

C++中模板使用详解

转自&#xff1a;http://www.360doc.com/content/09/0403/17/799_3011262.shtml 1. 模板的概念。 我们已经学过重载(Overloading)&#xff0c;对重载函数而言,C的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如&#xff0c;为求两个数的最大值&#xf…

腾讯2016春招安全岗笔试题解析

腾讯2016春招安全岗笔试题解析 昨天&#xff08;4月2日&#xff09;晚上7:00到9:00做了腾讯春招安全岗的笔试题。下面解析一下&#xff1a; 题目解析 1 在生成随机数前用当前时间设置随机数种子应该是安全的。如果程序用固定的数产生随机数&#xff0c;其结果也是固定的。如果用…

VS项目属性的一些配置项的总结(持续增加。。。)

首先&#xff0c;解决方案和项目文件夹包含关系(c项目)&#xff1a; VS解决方案和各个项目文件夹以及解决方案和各个项目对应的配置文件包含关系&#xff1a;假设新建一个项目ssyy&#xff0c;解决方案起名fangan&#xff0c;注意解决方案包括项目&#xff0c;此时生成的最外层…

子元素增加margin-top会增加给父元素的问题

假设我们有如下代码 <div id"father" style"height:400px;width:400px;background:#e4393c;">     <div id"child" style"background:green;height:100px;width:100px;margin-top:40px;"></div>   </div&g…

Zend Studio使用教程之升级Zend Studio(1/3)

2019独角兽企业重金招聘Python工程师标准>>> Zend Studio是新一代的专业级智能PHP IDE&#xff0c;它旨在帮助开发人员提高工作效率&#xff0c;创造出高品质的PHP应用程序&#xff01;它包含了PHP开发所必须的部件&#xff0c;通过一整套的编辑、调试、分析、优化和…

java中可重入锁的学习总结

2019独角兽企业重金招聘Python工程师标准>>> 经常看到网上的人说&#xff0c;可重入锁一词&#xff0c;但是总是没怎么了解&#xff0c;到底什么是可重入锁&#xff0c;一直是一个模糊的概念&#xff0c;下面来大致总结一下。 可重入锁&#xff1a;指的是同一个线程…

基于用户投票的排名算法(一):Delicious和Hacker News

互联网的出现&#xff0c;意味着"信息大爆炸"。 用户担心的&#xff0c;不再是信息太少&#xff0c;而是信息太多。如何从大量信息之中&#xff0c;快速有效地找出最重要的内容&#xff0c;成了互联网的一大核心问题。 各种各样的排名算法&#xff0c;是目前过滤信息…