Visual C++创建自定义dll及其调用实例
来源:互联网 发布:微道网络推广七格格 编辑:程序博客网 时间:2024/06/15 21:38
由于是团队开发,又由于coder无权知晓其他coder的工作内容,有时候dll就开始发挥威力了。这里,简单的写一个Visual C++环境下创建自定义dll及其调用实例。
dll是dynamic link library的简称,顾名思义,它就是一个动态加载的库文件。它的内容可以是各种Windows API函数,也可以是自己定义的工具函数。这样,其他人只需要知道你写的函数的接口,就可以很方便地调用该函数了。
第一部分,先给出创建dll的例子。
打开VC6.0。创建Win32 Dynamic-Link Library,输入工程名,然后选择第二项:A Simple DLL project。我输入的工程名为DllTest。修改DllTest.cpp为如下内容:
// DllTest.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
//这里要加入声明
extern "C" __declspec(dllexport) int fun(int a, int b);
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
//这是具体的定义
int fun(int a,int b)
{
return a+b;
}
修改完之后,按F7编译链接。应该可以在Debug目录下看到DllTest.dll。
第二部分,调用DllTest.dll。
创建一个Win32 Console Application。输入工程名dll_call创建一个空的工程。再创建一个cpp文件,名为dll_calll.cpp。
内容如下:
#include <iostream>
#include <windows.h>
int main()
{
//声明一个函数指针,以定义要引用的函数
typedef int (*func)(int,int);
//声明一个HINSTANCE进程句柄
HINSTANCE hDLL;
//声明一个func的实例
func add;
//加载所要调用的dll
hDLL=LoadLibrary("DllTest.dll");
//判断该进程句柄是否存在
if(!hDLL)
{
std::cout<<"所用dll不存在!!!"<<std::endl;
Sleep(2000);//暂停2秒,让coder看清楚提示
return 0;
}
//如果进程句柄存在,则获取dll中定义的函数
add=(func)GetProcAddress(hDLL,"fun");
//执行加法,不是家法,呵呵。
int re=add(5,7);
//输出结果
std::cout<<re<<std::endl;
//释放dll
FreeLibrary(hDLL);
return 0;
}
调用过程要注意两个函数,一个是LoadLibrary函数,这个函数做加载dll之用,这个函数内部操作机制,就是将该dll定义的内容作为一个独立的部分加载到内存中;另一个是GetProcAddress函数,获取某一个函数(本例中为fun函数)在内存中的具体地址。
这样,一个简单的实例就完成了。
- Visual C++创建自定义dll及其调用实例
- C语言创建动态dll,并调用该dll(visual studio 2013环境下)
- C语言创建动态dll,并调用该dll(visual studio 2013环境下)
- c语言创建dll,c语言调用dll
- Visual 2012 C++ 创建和静态调用dll
- [C#]创建并调用dll文件
- VC创建DLL动态链接库及其调用
- dll及其调用简介
- 如何利用C#创建和调用DLL (步骤+实例)
- 创建并调用MFC规则DLL的实例
- DLL调用实例
- 【混合编程实例】C/C++调用FORTRAN编写的DLL
- C# 调用自定义dll
- 利用Visual C#.net 创建一个DTS 自定义的任务
- visual studio 2010 创建 DLL
- vs2005制做DLL及其调用
- .dll文件讲解,及其调用
- Dll创建及调用
- hibernate中Session常见操作
- dbms_rowid查看每个块中的记录数
- hibernate的关系映射(1)
- hibernate之使用脱管对象(使脱管对象变成瞬时对象)
- 1033. City Road
- Visual C++创建自定义dll及其调用实例
- 我的网络模块设计第一版
- VS2008下编写调试dll的一个实例(参考msdn)
- hibernate的关系映射(2)
- 我的网络模块设计第二版
- 关于吃
- GridView“GridView1”激发了未处理的事件“PageIndexChanging”
- C语言底层调用的实现机制
- 要开始写博啦