DLL入门
DllTest工程
QMath.h
#pragma once #ifdef API_EXPORT
#define DLL_CLASS __declspec(dllexport)
#define DLL_API extern "C" __declspec(dllexport)
#else
#define DLL_CLASS __declspec(dllimport)
#define DLL_API extern "C" __declspec(dllimport)
#endif DLL_API int Add(int a, int b);
DLL_API int Sub(int a, int b); class DLL_CLASS QMath
{
public:
int Add(int a, int b);
int Sub(int a, int b);
};
QMath.cpp
#include "StdAfx.h" #define API_EXPORT
#include "QMath.h" int Add(int a, int b)
{
return (a+b);
} int Sub(int a, int b)
{
return (a-b);
} int QMath::Add(int a, int b)
{
return (a+b);
} int QMath::Sub(int a, int b)
{
return (a-b);
}
dllmain.cpp
#include "stdafx.h" BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{ return TRUE;
}
Test测试工程:
隐式加载:
需要三个文件:*.h、*.lib、*.dll
//隐式加载
#include "../DllTest/QMath.h"
#pragma comment(lib, "../Debug/DllTest.lib")
int _tmain(int argc, _TCHAR* argv[])
{
int nRet = Add(, );
nRet = Sub(, ); QMath m;
nRet = m.Add(, );
nRet = m.Sub(, ); return ;
}
显示加载:
需要文件:*.dll
//显示加载
typedef int (*ADD_PROC)(int a, int b);
typedef int (*SUB_PROC)(int a, int b);
int _tmain(int argc, _TCHAR* argv[])
{
HMODULE hModule = ::LoadLibrary(_T("../Debug/DllTest.dll"));
if ( NULL == hModule )
return ;
ADD_PROC Add = (ADD_PROC)::GetProcAddress(hModule, "Add");
SUB_PROC Sub = (SUB_PROC)::GetProcAddress(hModule, "Sub");
int nRet = ;
{
if ( Add )
nRet = Add(, );
if ( Sub )
nRet = Sub(, );
}
::FreeLibrary(hModule);
hModule = NULL; return ;
}
DLL入门的更多相关文章
- DLL入门浅析(5)——使用DLL在进程间共享数据
转载自:http://www.cppblog.com/suiaiguo/archive/2009/07/21/90734.html 在Win16环境中,DLL的全局数据对每个载入它的进程来说都是相同的 ...
- DLL入门浅析(4)——从DLL中导出类
转载自:http://www.cppblog.com/suiaiguo/archive/2009/07/20/90663.html 前面介绍了怎么从DLL中导出函数和变量,实际上导出类的方法也是大同小 ...
- DLL入门浅析(3)——从DLL中导出变量
转载自:http://www.cppblog.com/suiaiguo/archive/2009/07/20/90643.html 前面介绍了怎么从DLL中导出函数,下面我们来看一下如何从DLL中导出 ...
- DLL入门浅析(2)——如何使用DLL
转载自:http://www.cppblog.com/suiaiguo/archive/2009/07/20/90621.html 上文我简单的介绍了如何建立一个简单DLL,下面再我简单的介绍一下如何 ...
- DLL入门浅析(1)——如何建立DLL
转载自:http://www.cppblog.com/suiaiguo/archive/2009/07/20/90619.html 初学DLL,结合教程,总结一下自己的所得,希望对DLL初学者们有所帮 ...
- DLL入门浅析【转】
1.建立DLL动态库 动态链接库(DLL)是从C语言函数库和Pascal库单元的概念发展而来的.所有的C语言标准库函数都存放在某一函数库中.在链接应用程序的过程中,链接器从库文件中拷贝程序调用的函数 ...
- DLL导出类避免地狱问题的完美解决方案
DLL动态链接库是程序复用的重要方式,DLL可以导出函数,使函数被多个程序复用,DLL中的函数实现可以被修改而无需重新编译和连接使用该DLL的应用程序.作为一名面向对象的程序员,希望DLL可以导出类, ...
- windows服务参考
dll文件 aaclient.dll 何时何地都可以访问客户端 accessibilitycpl.dll 轻松访问控制面板 acledit.dll 访问控制列表编辑器 aclui.dll 安全描述符编 ...
- duilib入门之贴图描述、类html文本描述、动态换肤、Dll插件、资源打包
转载自duilib入门文档 贴图描述: Duilib的表现力丰富很大程度上得益于贴图描述的简单强大.Duilib的贴图描述分为简单模式和复杂模式两种. 简单模式使用文件名做为贴图描述内容,在这种方式下 ...
随机推荐
- 怎样让HTML 表格中内容自动换行??
<table style="word-break:break-all; word-wrap:break-all;">
- android 中 viewpager 滑动的指示器
先看下效果图: 这个需要用到1个开源的 库,这个后面也会说下的. 工程目录: 1. MainActivity.java public class MainActivity extends Fragme ...
- 【转】WARNING! File system needs to be upgraded. You have version null and I want version 7. Run the '${HBASE_HOME}/bin/hbase migrate' script. 的解决办法
前段时间集群出问题,hadoop和hbase启动不了了. 后来hadoop回复了,hbase死活master无法启动.打开日志发现报了以下错误: WARNING! File system needs ...
- 双系统(win8.1+ubuntu14.04)删除win下分区导致grub rescue解决方案
几个grub rescue下的命令的含义: set 设置环境变量 ls 查看设备 insmod 加载模块 root 指定用于启动系统的分区 prefix 设定grub启动路径 操作流程: 1. 先使 ...
- haproxy文章
http://ximenfeibing.blog.51cto.com/8809812/1663387
- 关于android fragment 某些使用记录
1.首先是当android2.3.3之前还是用着android-support-v4.jar来加载Fragment时. a.在xml布局应该如何定义呢? 答案:用FrameLayout标签来定义(在a ...
- 什么是UML?分哪两类?
统一建模语言(UML是 Unified Modeling Language的缩写)是用来对软件密集系统进行可视化建模的一种语言.UML为面向对象开发系统的产品进行说明.可视化.和编制文档的一种标准语言 ...
- 制做rpm包工具fpm安装
安装ruby模块 [root@c01 ~]# yum install ruby rubygems ruby-devel -y # 查看当前使用的rubygems仓库 [root@c01 ~]# gem ...
- git将本地项目添加到github上
git init git add . git commit -m '添加备注' git add remote origin originUrl git push -u origin master 注意 ...
- Fluent UDF【5】:第一个UDF
这里以一个简单的初始化案例来描述UDF的使用过程. 0 Fluent中的Patch Fluent中提供了全域初始化以及局部Patch功能.对于整体区域的全局初始化可以采用starndard及hybri ...