【转】用VC6.0创建和调用win32 dll

本文详细介绍如何使用VC创建DLL并导出函数,包括通过.lib文件进行装载期间动态链接及运行期间动态链接的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、生成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失败等),在你的程序上应该加 上这种处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值