VC中DLL的创建及调用方法

原创 2002年07月15日 10:19:00

 

VCDLL的创建及调用方法

此中只有实际才操作,而无相关理论<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

²      DLL的创建

首先,用VC集成开发界面中的“新建”,新建一个项目。无论是VC6.0还是VC.NET,都有建立DLL项目的选项。只不过有些稍有不同,例如VC.NET中就有ISAPI DLL,扩展存储过程DLL等,这些都不在讨论的范围。例如我们建立了一个用静态连接MFC库的DLL项目,名称为mydll

然后,编辑mydll.cpp文件,在其中加入我们自己的函数void go()。注意,不需要在mydll.h中声明它,而需要将函数头变成如下样子:

extern “c” __declspec(dllexport) void go()

{

//code……

}

dllexport表示这个函数是由外部调用的。

由于是否带参数,要影响到外部调用的方式,因此,我们再声明一个带参数的函数:

extern “c” __declspec(dllexport) void went(CString str)

{

//code……

}

OK,下面编译连接形成mydll.dll文件。

²      DLL的调用

好,下面我们就用VC写个程序调用它。在调用的函数中,首先要获得DLL的句柄,有如下语句:

HINSTANCE     dllinstance;

dllinstance=::LoadLibrary(strDllUrl);

if(dllinstance==NULL) AfxMessageBox("can't open dll file");

   其中strDllUrl是mydll.dll路径的字符串,这样程序才能找到它。::LoadLibrary获得参数标识的DLL文件的句柄。

    获得句柄后,下面要获得函数地址以便执行它。有如下语句:

    FARPROC  proc;

    proc=GetProcAddress(dllinstance,"go");

     if(proc==NULL) AfxMessageBox("can't find function");

     else proc();

FARPROC是一个远程过程指针,通过GetProcAddress获得函数的地址。它的两个参数就是dll文件句柄和函数的名字了。

然后FARPROC就可以和go一样的使用了,它就是go ,go 就是它。

而对于带参数的DLL中的函数,调用方法有所不同。因为对函数的调用是通过对它地址的引用进行的,这样,传入参数对不对,在函数调用程序的编译和联接过程中,无法知道其正确性。因此,要在调用程序中对DLL中带参数的函数做个声明,如mydll中的went,我们要做个声明如下:

typedef void (FAR __cdecl *MYWENT)(CString);

然后以类型MYWENT声明变量既可调用,如下:

    MYWENT myproc;

    myproc =(MYWENT)GetProcAddress(dllinstance,"go");

     if(myproc ==NULL) AfxMessageBox("can't find function");

     else myproc (o-----yeah---------);

注意声明的时候呢,由于DLL中WENT的定义为C语言调用规范,因此MYWENT前一定要用__cdecl,而VC中常用的__stdcall是PASCAL调用规范,不可以的。一定要注意。

VC中DLL的创建及调用方法

1.DLL的创建首先,用VC集成开发界面中的“新建”,新建一个项目。无论是VC6.0还是VC.NET,都有建立DLL项目的选项。只不过有些稍有不同,例如VC.NET中就有ISAPI DLL,扩展存储过...
  • doudoushen
  • doudoushen
  • 2006年08月05日 19:56
  • 1510

VC中DLL的创建及调用方法

VC中DLL的创建及调用方法 此中只有实际才操作,而无相关理论 ²      DLL的创建 首先,用VC集成开发界面中的“新建”,新建一个项目。无论是VC6.0还是VC.NET,都有建立DLL项目的选...
  • zhuerbb
  • zhuerbb
  • 2008年02月25日 15:39
  • 465

VC6.0创建DLL动态链接库四大要素

要成功地编辑,编译和链接一个动态链接库,应该包括以下要素:建立工程文件,使用输出说明,应用初始化函数和编制函数功能。 1.       建立工程文件 在选取类型的时候要选择“Dynamic __L...
  • wanghaihao_1
  • wanghaihao_1
  • 2016年04月08日 17:40
  • 699

VC++创建DLL工程最简单实例

VC++创建DLL工程最简单实例 1.文件-》新建 -》 选择 Win32 Dynamic-Link Library -》 工程名称输入 MyDLL -》确定 2.向导1 选择《一个可以导出某些符号...
  • u011883102
  • u011883102
  • 2015年06月04日 10:38
  • 4664

VC中生成动态链接库的三种方式(导出函数)

开发环境:VS2010 一 创建动态链接库项目 文件->新建->项目,选择建立Win32项目  点击确认后,点击下一步,看大如下界面,选择dll,再点击完成。   生成如下图所示的文件结构: ...
  • lzhui1987
  • lzhui1987
  • 2015年10月28日 20:55
  • 1313

QT创建与调用Dll方法

创建QT中的一个DLL,如下图选择: 效果如图所示: 下面是代码: dll.h:: #ifndef DLL_H #define DLL_H #include using namespace std...
  • ljt350740378
  • ljt350740378
  • 2016年11月16日 16:12
  • 1919

VB中调用VC++开发的DLL

转自:http://lanshanlhy.blog.163.com/blog/static/302294762010112832031218/ 再谈在VB中调用VC++开发的DLL  再谈...
  • xl19900502
  • xl19900502
  • 2016年02月22日 11:17
  • 577

Qt 一步一步实现dll调用(附源码)

前言:从上个月底因为新项目统一平台需要用Qt开发,就开始研究Qt,但是一直感觉没有入门,不知道为什么,很多功能实现了,但是知其然不知其所以然,就像现在设计的项目 使用插件进行开发,做软件开发大体...
  • imxiangzi
  • imxiangzi
  • 2016年04月10日 09:02
  • 666

VC中DLL的创建及调用

方法一:VC中DLL的创建及调用方法     此中只有实际才操作,而无相关理论         ²             DLL的创建         首先,用VC集成开发界面中的“新建”...
  • Joetao
  • Joetao
  • 2009年05月09日 22:42
  • 1358

vc++ 调用外部dll的方法

调用DLL有两种方法:静态调用和动态调用. (一).静态调用其步骤如下: 1.把你的youApp.DLL拷到你目标工程(需调用youApp.DLL的工程)的Debug目录下; 2.把...
  • gaoszzzz
  • gaoszzzz
  • 2017年08月15日 11:09
  • 507
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC中DLL的创建及调用方法
举报原因:
原因补充:

(最多只允许输入30个字)