vc 创建dll文件以及dll调用
2009-01-06 14:23
253 查看
一、生成DLL
1、用VC建立一个Win32DLL工程--DllTest,选上“导出符号”;
2、在DllTest.cpp中编写导出函数Fun(),这个函数是别的程序要调用的函数:
int fun(int i)
{
return i*i;
}
3、在DllTest.h中声明导出这个函数:
__declspec(dllexport) int fun(int i);
4、第三步也可以用DEF文件来指定要导出的函数,这样做可以在程序运行过程中显式的加载DLL。关于在程序运行过程中显式的加载DLL见 二、调用DLL。
添加一个DEF文件到工程,写入如下内容:
EXPORTS
Fun
5、编译这个工程,生成DllTest.dll,同时也生成了DllTest.lib文件。这个文件是供程序开发用的导入库。
二、调用DLL
调用DLL有两种方法:
装载期间动态链接--模块可以向调用本地函数一样调用从其他模块导出的函数。装载期间链接必须使用DLL的导入库,也就是.lib文件。它为系统提供了加载这个DLL和定位DLL中的导出函数所需要的信息。
运行期间动态链接--程序运行期间可以使用LoadLibrary加载这个DLL,然后调用GetProcAddress函数取得DLL导出函数的地址,然后通过函数地址调用DLL中的函数。
1、装载期间动态链接。
新建一个Win32 Console Application工程--DllApp。把刚才建立的那个工程中的DllTest.dll、DllTest.h和DllTest.lib拷贝到DllApp目录下。在DllApp.cpp文件中写入:
#include <windows.h>
#include <stdio.h>
#include "DllTest.h"
//要链接到的DllTest.lib库
#pragma comment(lib,"DllTest.lib")
void main()
{
int a = Fun(2);
printf("The result is %d/n",a);
}
2、运行期间动态加载
新建一个Win32 Console Application工程--DllApp2。把建立的DllTest.dll拷贝到DllApp2目录中--一定要用在生成DLL部分按照第四步产生的DLL文件,否则程序无法运行。在DllApp2.cpp中写入:
#include <windows.h>
#include <stdio.h>
typedef void (*PFUN)(int);//声明函数原型
void main()
{
HMODULE hModule = ::LoadLibrary("DllTest.dll");//加载DLL库
PFUN newfun = (PFUN)::GetProcAddress(hModule,"fun");//取得fun函数的地址
int i = newfun(2);
printf("The result is %d",i);
::FreeLibrary(hModule);
}
1、用VC建立一个Win32DLL工程--DllTest,选上“导出符号”;
2、在DllTest.cpp中编写导出函数Fun(),这个函数是别的程序要调用的函数:
int fun(int i)
{
return i*i;
}
3、在DllTest.h中声明导出这个函数:
__declspec(dllexport) int fun(int i);
4、第三步也可以用DEF文件来指定要导出的函数,这样做可以在程序运行过程中显式的加载DLL。关于在程序运行过程中显式的加载DLL见 二、调用DLL。
添加一个DEF文件到工程,写入如下内容:
EXPORTS
Fun
5、编译这个工程,生成DllTest.dll,同时也生成了DllTest.lib文件。这个文件是供程序开发用的导入库。
二、调用DLL
调用DLL有两种方法:
装载期间动态链接--模块可以向调用本地函数一样调用从其他模块导出的函数。装载期间链接必须使用DLL的导入库,也就是.lib文件。它为系统提供了加载这个DLL和定位DLL中的导出函数所需要的信息。
运行期间动态链接--程序运行期间可以使用LoadLibrary加载这个DLL,然后调用GetProcAddress函数取得DLL导出函数的地址,然后通过函数地址调用DLL中的函数。
1、装载期间动态链接。
新建一个Win32 Console Application工程--DllApp。把刚才建立的那个工程中的DllTest.dll、DllTest.h和DllTest.lib拷贝到DllApp目录下。在DllApp.cpp文件中写入:
#include <windows.h>
#include <stdio.h>
#include "DllTest.h"
//要链接到的DllTest.lib库
#pragma comment(lib,"DllTest.lib")
void main()
{
int a = Fun(2);
printf("The result is %d/n",a);
}
2、运行期间动态加载
新建一个Win32 Console Application工程--DllApp2。把建立的DllTest.dll拷贝到DllApp2目录中--一定要用在生成DLL部分按照第四步产生的DLL文件,否则程序无法运行。在DllApp2.cpp中写入:
#include <windows.h>
#include <stdio.h>
typedef void (*PFUN)(int);//声明函数原型
void main()
{
HMODULE hModule = ::LoadLibrary("DllTest.dll");//加载DLL库
PFUN newfun = (PFUN)::GetProcAddress(hModule,"fun");//取得fun函数的地址
int i = newfun(2);
printf("The result is %d",i);
::FreeLibrary(hModule);
}
相关文章推荐
- 用VC创建供PB调用的DLL
- 如何编译生成dll文件以及如何调用dll文件
- C++Builder调用VC的dll以及VC调用C++Builder的dll
- VC中DLL的创建及调用方法
- VC中DLL的创建及调用
- VC++ DLL的创建与动态调用模板
- vc制作DLL文件与调用DLL文件的方法
- VC中创建DLL,导出全局变量,函数和类(隐式调用)
- 在C++创建DLL,以及使用C++或者C#分别调用DLL中的方法
- VC.Net中创建与使用静态链接库(lib)和动态链接库(dll),以及它们的区别
- vs下opencv的人脸检测以及qt下dll的封装调用(二、dll的创建)
- VC9.0 Express下如何创建支持VB6的DLL,以及字符串传递
- VB创建ActiveX dll 的COM服务器,VC调用VB COM方法
- VC中DLL的创建及调用方法
- VC中DLL的创建及调用方法
- VC中DLL的创建及调用方法
- 生成dll文件以及python对DLL中函数的调用(参数类型以及返回值)
- VC++:创建,调用MFC动态链接库(扩展DLL)
- 调用以及调试自己创建的dll文件
- 在VC中创建DLL文件的方法步骤--DLL文件与exe文件的区别