dll库生成和使用
抄自http://www.cnblogs.com/fangyukuan/archive/2010/06/20/1761464.html
1. VS2010中新建Win32-Win32项目,输入名称DllDemo
2. 选择DLL,点击完成
3. 在DllDemo.cpp中加入:
// DllDemo.cpp : 定义 DLL 应用程序的导出函数。
// #include "stdafx.h" //使用关键字_declspec(dllexport)来声明外部引用的函数
extern "C" __declspec(dllexport) void SayHello(const char * string)
{
::MessageBox(NULL, string, "提示", MB_OK);
}
4. 生成解决方案
第二步,使用这个Dll库。新建控制台程序TestDll。
在TestDll.cpp中输入:
//#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std; //定义函数指针
typedef void (*SAYHELLO)(const char *); int main()
{
HINSTANCE hDll; //装载dll库
hDll = LoadLibrary(L"DllDemo.dll");
if (NULL == hDll){
cout<<"加载dll失败!\n";
}else{
// 从dll中获取函数的入口地址
SAYHELLO lpproc = (SAYHELLO)GetProcAddress(hDll, "SayHello");
if (NULL != lpproc){
//调用dll中的函数
(*lpproc)("优衣库");
}
// 卸载库
FreeLibrary(hDll);
}
return ;
}
点击生成解决方案,再点击运行,运行结果如图:
(完)
dll库生成和使用的更多相关文章
- VS2010 DLL库生成和使用
一.生成dll文件(VS2010 Win32 程序) CreateDll.h // 下列 ifdef 块是创建使从 DLL 导出更简单的// 宏的标准方法.此 DLL 中的所有文件都是用命令行上定义的 ...
- #Lua:Lua调用C++生成的DLL库
Lua调用C++生成的DLL库 本文参考了某大佬的博客,写得十分详细,推荐!!! 需求: 在之前的求解器中添加了Lua库,使得程序可以在Lua脚本中实现自定义函数功能,考虑到未来可能需要与第三方程序库 ...
- [转] lib和dll 区别,生成及使用方法
lib 和 dll 的区别.生成以及使用详解 [目录] lib dll介绍 生成动态库 调用动态库 生成静态库 调用静态库 首先介绍一下静态库(静态链接库).动态库(动态链接库)的概念,首先两者都是代 ...
- Python 调用 C# dll库最简方法
1.为什么要跨平台编程?双平台编程或多平台编程,只是为提供更好开发更兼容的解决方案的一种手段,编程时服务于产品和客户的,也是因地制宜. 先安装python所需的库clr ,我这里已经安装了,可以去对应 ...
- Unity中调用DLL库
DLL -- Dynamic Link Library(动态链接库文件),这里以Window平台为例. Unity支持的两种语言生成的DLL库(C++.C#),这里以C#为例,C++网上可以搜索很详细 ...
- Visual Studio 进行Excel相关开发,Microsoft.Office.Interop.Excel.dll库
1. Interop.Excel.dll 的查找 本文中将 Microsoft.Office.Interop.Excel.dll库简称为Interop.Excel.dll库 其实在使用Visual S ...
- boost库生成文件命名和编译
生成文件命名规则:boost中有许多库,有的库需要编译.而有的库不需要编译,只需包含头文件就可以使用.编译生成的文件名字普遍较长,同一个库根据编译链接选项不同,又可以生成多个不同名字的文件.生成的文件 ...
- C#之改变窗体icon图标、新建类文件、调用dll库
一.改变窗体的图标 没有修改之前为: 修改之后为自己想要的图标: 需要在窗体Form1.cs属性里边添加icon图片文件: 二.新建cs类文件 如下图所示,新建一个类文件,我用于来调用库文件也可以来定 ...
- C#调试C++DLL库
C#调试C++DLL库 https://blog.csdn.net/gggg_ggg/article/details/51086089 对于托管代码调用非托管DLL文件,已经是非常普遍的事情,下面写一 ...
随机推荐
- List和Array相互转换
List<String> list = new ArrayList<String>(); list.add("1"); list.add("2&q ...
- Flutter -------- BottomNavigationBar 界面切换
Android 中有BottomNavigationBar+Fragment切换 而在Flutter也有的BottomNavigationBar 效果图 底部有两种情况 底部导航栏的类型更改其项目的显 ...
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_1、SpringBoot2.x课程介绍和高手系列知识点
1 ======================1.零基础快速入门SpringBoot2.0 5节课 =========================== 1.SpringBoot2.x课程全套介绍 ...
- vue模块化以及封装Storage组件实现保存搜索的历史记录
<template> <div id="app"> <input type="text" v-model='todo' @keyd ...
- Objective-C轻量级泛型
在Apple发布Xcode7的时候,不仅把Swift编程语言升级到了2.0版本,而且还对Objective-C做了许多提升,包括引入__nonnull/__nullable.其中,对于Objectiv ...
- Spark累加器(Accumulator)
一.累加器简介 在Spark中如果想在Task计算的时候统计某些事件的数量,使用filter/reduce也可以,但是使用累加器是一种更方便的方式,累加器一个比较经典的应用场景是用来在Spark St ...
- 一、postman简介
一.场景 1.开发接口的时候需要快速的调用接口,以便调试 2.测试的时候需要非常方便的调用接口,通过不同的参数去测试接口的输出 3.这些接口调用是需要保存下来的反复运行的 4.在运行过程中如果有断言( ...
- PHP 小程序发模板消息
记录一下DEMO <?php function getAccessToken ($appid, $appsecret) { $url='https://api.weixin.qq.com/cgi ...
- SFTP服务配置以及命令/代码操作
POM <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or ...
- php调用webservice报错Class 'SoapClient' not found(转)
php在调用webservice时,报告如下类似错误: ( ! ) Fatal error: Class 'SoapClient' not found in E:/WebSrv/CI/system/l ...