【转】用VC6.0创建和调用win32 dll
2010-08-23 15:27
351 查看
一、生成DLL
1、用VC建立一个Win32DLL工程--DllTest,选上“导出符号”;
2、在DllTest.cpp中编写导出函数Fun(),这个函数是别的程序要调用的函数:
3、在DllTest.h中声明导出这个函数:
4、第三步也可以用DEF文件来指定要导出的函数,这样做可以在程序运行过程中显式的加载DLL。关于在 程序运行过程中显式的加载DLL见
二、调用DLL。
添加一个DEF文件到工程,写入如下内容:
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文件中写入:
2、运行期间动态加载 新建一个Win32 Console Application工程--DllApp2。把建立的DllTest.dll拷贝到DllApp2目录中--一定 要用在生成DLL部分按照第四步产生的DLL文件,否则程序无法运行。在DllApp2.cpp中写入:
注意:由于缩进排版太麻烦,这个程序没有加入错误处理(比如装载DLL失败等),在你的程序上应该加 上这种处理。
1、用VC建立一个Win32DLL工程--DllTest,选上“导出符号”;
2、在DllTest.cpp中编写导出函数Fun(),这个函数是别的程序要调用的函数:
1: #include "DllTest.h"
2: int fun(int i)
3: {
4: return i*i;
5: }
3、在DllTest.h中声明导出这个函数:
1: extern "C" __declspec(dllexport) int fun(int i);
4、第三步也可以用DEF文件来指定要导出的函数,这样做可以在程序运行过程中显式的加载DLL。关于在 程序运行过程中显式的加载DLL见
二、调用DLL。
添加一个DEF文件到工程,写入如下内容:
1: EXPORTS
2: 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文件中写入:
1: #include
2: #include
3: #include "DllTest.h" //要链接到的DllTest.lib库
4: #pragma comment(lib,"DllTest.lib" )
5:
6: void main()
7: {
8: int a = Fun(2);
9: printf("The result is %d/n" ,a);
10: }
2、运行期间动态加载 新建一个Win32 Console Application工程--DllApp2。把建立的DllTest.dll拷贝到DllApp2目录中--一定 要用在生成DLL部分按照第四步产生的DLL文件,否则程序无法运行。在DllApp2.cpp中写入:
1: #include
2: #include
3: typedef void (*PFUN)(int );//声明函数原型
4: void main()
5:{
6: HMODULE hModule = ::LoadLibrary("DllTest.dll" );//加载DLL库 PFUN
7: newfun = (PFUN)::GetProcAddress(hModule,"fun" );//取得fun函数的地址
8: int i = newfun(2);
9: printf("The result is %d" ,i);
10: ::FreeLibrary(hModule);
11: }
注意:由于缩进排版太麻烦,这个程序没有加入错误处理(比如装载DLL失败等),在你的程序上应该加 上这种处理。
相关文章推荐
- VC6.0利用CreateProcess创建子进程,MFC调用Win32生成的.exe文件为例
- VC6.0如何创建一个基本的Win32 DLL工程
- VC6.0中,创建、调用 dll
- DLL的开发与调用(一)——创建导出函数的Win32 DLL
- 创建Win32 DLL,并在C#里面调用
- DLL的开发与调用(二)——创建导出类的Win32 DLL
- 创建Win32 DLL,并在C#里面调用
- VC6.0中,创建、调用 dll
- 创建Win32 DLL,并在C#里面调用
- VC6.0 创建与调用DLL 1
- VC6.0中,创建、调用 dll
- VC6.0 创建与调用DLL 1
- VC6.0中,创建、调用 dll
- VC6.0中,创建、调用 dll
- 创建并调用Win32 DLL
- 创建Win32 DLL,并在C#里面调用
- VC6.0 DLL调用与创建的例子(HOOK)
- vc6.0创建与调用dll
- win32 DLL中创建的的对话框资源被应用程序调用无法识别的问题
- C# 创建 调用 动态链接库(dll)