VC++创建和调用dll+静态调用和动态调用

1 篇文章 1 订阅

在工程应用中,动态链接库(dll)的重要性和灵活性是不言而喻的,这里将介绍一种最基本的创建和调用dll的方法,下面是使用VC++6.0的实现过程: 
1. 创建dll 
 
如上图所示,选择Win32 Dynamic-Link Library,创建名为dllTest的空工程;在该工程项下分别添加.cpp和.h文件(其名称分别为dllTest.cpp和dllTest.h),在.h项下添加代码:

extern "C" _declspec(dllexport) void Test(int a,int b);   
  • 1

在.cpp项下添加代码:

 
  1. #include "dllTest.h"

  2. #include<iostream>

  3. using namespace std;

  4. int add(int a,int b)

  5. {

  6. int C;

  7. C=a+b;

  8. return C;

  9. }

  10. extern "C" _declspec(dllexport) int Test(int a,int b)

  11. {

  12. int C=add(a,b);

  13. cout<<"C="<<C<<endl;

  14. return 0;

  15. }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

编译源文件后,如果没有问题,即在dllTest文件夹中的debug项下生成dllTest.dll文件。至此,dll文件创建结束。注意:在dll创建过程中如果有子函数、类等,即可将其放在这里的主体函数外进行声明,同时需要加上必要的头文件。 
2. 调用dll 
调用dll的方式有多种,这里介绍一种比较简单的方式——显式调用,具体步骤如下: 
(1)先新建一个win32控制台应用程序,命名为Test,如下图所示: 

(2)添加.cpp文件(命名为Test.cpp),并在其中添加如下代码:

 
  1. #include <iostream>

  2. #include<windows.h>

  3. #include<string>

  4. using namespace std;

  5. int main()

  6. {

  7. int a,b;

  8. cout<<"请输入一个整数a=";

  9. cin>>a;

  10. cout<<endl;

  11. cout<<"请输入一个整数b=";

  12. cin>>b;

  13. cout<<endl;

  14. typedef int(*pTest)(int a,int b);//函数指针

  15. pTest Test=NULL;

  16. HINSTANCE hDLL;

  17. hDLL=LoadLibrary("dllTest.dll");//加载动态链接库dllTest.dll文件;

  18. Test=(pTest)GetProcAddress(hDLL,"Test");

  19. if (Test)//如果取出函数成功,则执行下面的语句

  20. {

  21. int C=Test(a,b);

  22. cout<<"OK!"<<endl;

  23. }

  24. FreeLibrary(hDLL);//卸载dllTest.dll文件;

  25. return 0;

  26. }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

(3)将之前声生成的dllTest.dll文件复制到Test的debug项下后,即可运行(2)中程序对该dll进行显式调用。

 

 

C++调用DLL有两种方法——静态调用和动态调用

 

[C++]调用DLL有两种方法——静态调用和动态调用
(一).静态调用其步骤如下:
1.把你的youApp.DLL拷到你目标工程(需调用youApp.DLL的工程)的Debug目录下;
2.把你的youApp.lib拷到你目标工程(需调用youApp.DLL的工程)目录下;
3.把你的youApp.h(包含输出函数的定义)拷到你目标工程(需调用youApp.DLL的工程)目
录下;
4.打开你的目标工程选中工程,选择Visual C++的Project主菜单的Settings菜单;
5.执行第4步后,VC将会弹出一个对话框,在对话框的多页显示控件中选择Link页。然
后在Object/library modules输入框中输入:youApp.lib
6.选择你的目标工程Head Files加入:youApp.h文件;
7.最后在你目标工程(*.cpp,需要调用DLL中的函数)中包含你的:#include “youApp.h”
注:youApp是你DLL的工程名。
(二).动态调用其程序如下:
动态调用时只需做静态调用步骤1.
{
HINSTANCE hDllInst = LoadLibrary(“youApp.DLL”);
if(hDllInst)
{
typedef DWORD (WINAPI *MYFUNC)(DWORD,DWORD);
MYFUNC youFuntionNameAlias = NULL; // youFuntionNameAlias 函数别名
youFuntionNameAlias = (MYFUNC)GetProcAddress
(hDllInst,”youFuntionName”);
// youFuntionName 在DLL中声明的函数名
if(youFuntionNameAlias)
{
youFuntionNameAlias(param1,param2);
}
FreeLibrary(hDllInst);
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值