DLL基础
Visual C++在创建DLL导出函数时,可能会对原始的函数名做修改。例如:
int WINAPI Add(int nLeft, int nRight)
导出后的函数名称是_Add@8。
下面两种方法可使编译器不对导出函数名称做修改:
- 使用def文件
- 在代码中添加:#pragma comment(linker, "/export:Add=_Add@8")
MyLib.h
#ifdef MYLIB_EXPORTS #define MYLIBAPI extern "C" __declspec(dllexport) #else #define MYLIBAPI extern "C" __declspec(dllimport) #endif MYLIBAPI int g_nResult; //MYLIBAPI int Add(int nLeft, int nRight);
MYLIBAPI int WINAPI Add(int nLeft, int nRight);
MyLibFile1.cpp
#include <windows.h>
#include "MyLib.h" #pragma comment(linker, "/export:Add=_Add@8") int g_nResult; //int Add(int nLeft, int nRight)
int WINAPI Add(int nLeft, int nRight)
{
g_nResult = nLeft + nRight;
return g_nResult;
}
MyLib.def
EXPORTS
Add
MyExeFile1.cpp
#include <windows.h>
#include <strsafe.h>
#include <stdlib.h> #include "..\MyLib.h" int WINAPI WinMain(HINSTANCE , HINSTANCE , LPTSTR , int)
{
int nLeft = , nRight = ; TCHAR sz[];
StringCchPrintf(sz, sizeof(sz)/sizeof(sz[]), TEXT("%d + %d = %d"),
nLeft, nRight, Add(nLeft, nRight));
MessageBox(NULL, sz, TEXT("Calculation"), MB_OK); StringCchPrintf(sz, sizeof(sz)/sizeof(sz[]),
TEXT("The result from the last Add is: %d"), g_nResult);
MessageBox(NULL, sz, TEXT("Last Result"), MB_OK); return ;
}
DLL基础的更多相关文章
- 动态链接库 —— Dll 基础
1. DLL 的初识 在 windows 中,动态链接库是不可缺少的一部分,windows 应用程序程序接口提供的所有函数都包含在 DLL 中,其中有三个非常重要的系统 DLL 文件,分别为 Kern ...
- Windows核心编程 第十九章 DLL基础
第1 9章 D L L基础 这章是介绍基本dll,我就记录一些简单应用,dll的坑点以及扩展后面两章会说,到时候在总结. 自从M i c r o s o f t公司推出第一个版本的Wi n d o w ...
- 静态库lib、动态库dll基础
首先从hello world!开始 //main.cpp文件 void cpu(); int main() { put(); ; } 在main.cpp中定义了一个cpu():函数,但没有实现其功能, ...
- 《windows核心编程系列》十九谈谈使用远程线程来注入DLL。
windows内的各个进程有各自的地址空间.它们相互独立互不干扰保证了系统的安全性.但是windows也为调试器或是其他工具设计了一些函数,这些函数可以让一个进程对另一个进程进行操作.虽然他们是为调试 ...
- WPF行为基础
理解行为 复杂的UI效果(缩放.拖拽.平滑等)通过样式与触发器比较难以实现,通过引入行为模型来实现.使用行为也可以处理UI操作之外的业务 程序集引用 System.Windows.Interactiv ...
- 《HiWind企业快速开发框架实战》(2)使用HiWind创建自己的项目
<HiWind企业快速开发框架实战>(2)使用HiWind创建自己的项目 关于HiWind HiWind企业快速开发框架,是基于.NET+EasyUi(支持各种前端扩展,后面将扩展Boot ...
- To IOC,代码结构演变的随想
代码结构演变 项目开始阶段 需求: 提供一个系统,可以在新春佳节之际以邮件的形式给员工发送新春祝福. 开发人员: 张三 版本一 string msg = "新年快乐!过节费5000.&quo ...
- 微信C# SDK
微信C# SDK # 模块功能 DLL 1 基础库 Senparc.Weixin.dll 2 微信公众号 / 微信支付 / JSSDK / 摇周边 / 等等 Senparc.Weixin.MP.dll ...
- AgileEAS.NET SOA 中间件平台 5.2 发布说明-包含Silverlight及报表系统的开源代码下载
一.AgileEAS.NET SOA 中间件简介 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速 ...
随机推荐
- vijos1196题解
Matrix67和Shadow正在做一个小游戏. 桌子上放着两堆糖果,Matrix67和Shadow轮流对这些糖果进行操作.在每一次操作中,操作者需要吃掉其中一堆糖果,并且把另一堆糖果分成两堆(可以不 ...
- Chrome浏览器扩展开发系列之十二:Content Scripts
Content Scripts是运行在Web页面的上下文的JavaScript文件.通过标准的DOM,Content Scripts 可以操作(读取并修改)浏览器当前访问的Web页面的内容. Cont ...
- for(int a:i)在java 编程中的使用
这种有冒号的for循环叫做foreach循环,foreach语句是java5的新特征之一,在遍历数组.集合方面,foreach为开发人员提供了极大的方便. foreach语句是for语句的特殊简化版本 ...
- PHP获取文件夹中的所有文件(包括子目录)
方法一: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 function tree($directory) ...
- 【NOIP模拟】board(线段树维护二进制,树序号化为二进制)
题目背景 SOURCE:NOIP2016-RZZ-2 T3 题目描述 给出这样一棵“二叉树”: 每个节点有左右两个儿子,并如下定义每个节点的高度:假设父亲节点的高度为 h ,那么他的两个儿子的节点的高 ...
- Java类加载机制、类加载器和反射机制-思维导图
参考文献: 1. <深入理解JVM虚拟机>
- 【jquery】ajax请求
1. defferred对象 实现链式回调函数编程. http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_d ...
- 【HTML】模板
<!DOCTYPE html> <head> <base href="http://www.w3school.com.cn/i/" target=&q ...
- js常用内置对象及方法
在js中万物皆对象:字符串,数组,数值,函数...... 内置对象都有自己的属性和方法,访问方法如下: 对象名.属性名称: 对象名.方法名称 1.Array数组对象 unshift( ) 数组开 ...
- sybase数据库和oracle数据库中字段中含有换行符的解决办法
最近在做数据库从sybase到oracle的迁移工作,sybase数据库表bcp导出后,通过sqlldr导入到oracle数据库,然后oracle数据库通过spool按照sybase数据库bcp的格式 ...