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函数)在内存中的具体地址。

这样,一个简单的实例就完成了。

原创粉丝点击