Visual C++创建自定义dll及其调用实例
2010-10-03 00:25
155 查看
由于是团队开发,又由于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函数)在内存中的具体地址。
这样,一个简单的实例就完成了。
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函数)在内存中的具体地址。
这样,一个简单的实例就完成了。
相关文章推荐
- 创建并调用MFC规则DLL的实例
- 创建用于非Visual C++工具的DLL——VB调用C++ DLL为何必须使用def文件
- 如何利用C#创建和调用DLL (步骤+实例)
- DLL的创建和调用实例教程
- DMO(DirectX Media Object)的工程创建过程及其调用方式
- dll创建和调用
- 在Visual C++中创建和使用dll
- BCB(C++ Builder)创建动态库(DLL,接口导出和调用),动态加载DLL
- MFC应用程序消息处理及其窗口创建和销毁过程函数调用顺序
- QT创建与调用Dll方法(包括类成员)--显式调用
- 在Dll中创建对话框并调用
- C++一个完整的类实例及其调用
- 在VS2015中用C++创建DLL并用C++调用且同一时候实现对DLL的调试
- VS2010中创建DLL和(静态)调用DLL
- MFC常规DLL的创建与使用实例
- Visual C++ 调用 Visual C++写的DLL最简单的方法
- 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类?
- VC++2005 编写只有资源文件的DLL及其调用方法
- 在Dll中创建对话框并调用
- Lesson_for_java_day25--java中GUI实例(键盘鼠标事件、菜单栏、自定义弹窗、调用弹窗)