windows下动态链接库的使用(实例)
2015-08-05 12:45
381 查看
一、生成DLL
1. 新建DLL工程
在VS中,新建一个空的项目,选Win32 Console Application,新建完后修改工程属性:把生成EXE改为生成DLL
2. 源代码:
ShowInfo.h
#define SHOWINFO_API __declspec(dllexport)
extern "C" SHOWINFO_API void fnShowInfo(void);
ShowInfo.c:
#include "ShowInfo.h"
#include <stdio.h>
SHOWINFO_API void fnShowInfo(void)
{
printf("Crab\n");
}
3. 编译连接,生成dll.dll文件
(在ShowInfo.h中声明函数的时候要加上 extern "C", 因为如果该函数可能会被c++ 程序调用。)
二、 使用DLL
1. 新建工程
新建一个Win32 Console Application,选择空的工程。
2. 源代码:
main.cpp
#include <windows.h>
#include <iostream>
using namespace std;
typedef void (*DllFn)(void);
int main()
{
HINSTANCE hInst = LoadLibrary(TEXT("ShowInfo.dll"));
if(hInst)
{
DllFn a =(DllFn) GetProcAddress(hInst,"fnShowInfo");
if(a)
a();
else
cout<<"ERROR on GetProcAddress"<<endl;
FreeLibrary(hInst);
}
else
cout<<"Error on Load library"<<endl;
}
(用 LoadLibrary 可能会出现 “不能将参数 1 从‘const char [13]’转换为‘LPCWSTR’”的错误,这时需要用到TEXT()函数。)
由于用了LoadLibrary函数,所以dll的文件名可以改变,只要文件名和LoadLibrary中的参数一样,就可以了。
3. 将上面工程生成的dll.dll文件复制到此工程的目录下,保证源文件与DLL文件在同一目录下。如果生成的EXE文件要直接运行,则要保证EXE文件与DLL文件在同一目录下。
4. 编译连接,执行。
1. 新建DLL工程
在VS中,新建一个空的项目,选Win32 Console Application,新建完后修改工程属性:把生成EXE改为生成DLL
2. 源代码:
ShowInfo.h
#define SHOWINFO_API __declspec(dllexport)
extern "C" SHOWINFO_API void fnShowInfo(void);
ShowInfo.c:
#include "ShowInfo.h"
#include <stdio.h>
SHOWINFO_API void fnShowInfo(void)
{
printf("Crab\n");
}
3. 编译连接,生成dll.dll文件
(在ShowInfo.h中声明函数的时候要加上 extern "C", 因为如果该函数可能会被c++ 程序调用。)
二、 使用DLL
1. 新建工程
新建一个Win32 Console Application,选择空的工程。
2. 源代码:
main.cpp
#include <windows.h>
#include <iostream>
using namespace std;
typedef void (*DllFn)(void);
int main()
{
HINSTANCE hInst = LoadLibrary(TEXT("ShowInfo.dll"));
if(hInst)
{
DllFn a =(DllFn) GetProcAddress(hInst,"fnShowInfo");
if(a)
a();
else
cout<<"ERROR on GetProcAddress"<<endl;
FreeLibrary(hInst);
}
else
cout<<"Error on Load library"<<endl;
}
(用 LoadLibrary 可能会出现 “不能将参数 1 从‘const char [13]’转换为‘LPCWSTR’”的错误,这时需要用到TEXT()函数。)
由于用了LoadLibrary函数,所以dll的文件名可以改变,只要文件名和LoadLibrary中的参数一样,就可以了。
3. 将上面工程生成的dll.dll文件复制到此工程的目录下,保证源文件与DLL文件在同一目录下。如果生成的EXE文件要直接运行,则要保证EXE文件与DLL文件在同一目录下。
4. 编译连接,执行。
相关文章推荐
- VC++自定义消息处理函数2
- java异常
- 编辑器类的介绍
- FreeImage裁剪示例
- Centost5.5_X64 Linux安装oracle 11.2.0.3 报错
- Servlet响应的中文字符集问题
- DWR如何获得返回对象
- Directionary 中Getfile中的通配符SearchPatern
- Android(java)学习笔记140:SpannableString类的使用
- 文件下载功能代码示例
- Keil4和Protues联调的做法
- LeetCode(95) Unique Binary Search Trees II
- nutch2.3命令参数解析
- 1037. Magic Coupon (25)
- leetCode 108.Convert Sorted Array to Binary Search Tree(将排序数组转换为BST) 解题思路和方法
- Java和C#的socket通信相关(转)
- 数据仓库与数据挖掘的OLAP技术----韩家炜教授的《数据挖掘概念与技术》学习笔记
- SAPUI5 table formatter
- akoj-1291-决战21点(C#)
- 用expect实现自动输入SSH的SCP信息,且不需要另外的文件