其实,调用dll文件的方法很多,不一定要使用LoadLibrary函数。如果使用的话,你就要预先声明dll中的函数,很麻烦。

下面是我使用dll时的一点技巧,就是引入lib文件,可以参考:

一.Win32 动态链接库

启动VC6,创建工程,选择 Win32 Dynamic-Link Library,输入工程名称,如Win32dll。确定,进入设置界面。在当前界面选择第三项:A DLL that exports some symbols。

创建完工程后,打开win32dll.h文件,会看到默认创建的函数。

其中创建了一个可以导出的类CWin32dll。在其他程序中可以调用此类。

还有一个全局的导出变量,一个导出函数。这些变量或者函数都是可以在其他程序中调用的。

和平常一样,为类添加成员函数、成员变量等。

编译,在debug文件夹下,会创建win32dll.lib,win32dll.dll文件。这两个文件和上述的win32dll.h头文件,都是在其他程序中需要用到的文件。

二.使用动态链接库DLL

新建一个对话框工程。将上述的三个文件:win32dll.lib,win32dll.dll,win32dll.h,拷贝到当前工程目录中。 在对话框的头文件中,引入上述头文件和lib库。

#include "win32dll.h"

#pragma comment(lib,"win32dll.lib")

在对话框类中,定义DLL类的实例。

CWin32dll m_dll;

这样就可以在本工程中使用DLL中的类及其类中函数了。当然,DLL中的全局变量,函数等也可以使用。

示例 DLL 和应用程序

在 Microsoft Visual C++ 6.0 中,可以通过选择“Win32 动态链接库”项目类型或“MFC 应用程序向导 (dll)”来创建 DLL。



下面的代码是一个在 Visual C++ 中通过使用“Win32 动态链接库”项目类型创建的 DLL 的示例。

// SampleDLL.cpp//#include "stdafx.h"#define EXPORTING_DLL#include "sampleDLL.h"BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ return TRUE;}void HelloWorld(){ MessageBox( NULL, TEXT("Hello World"), TEXT("In a DLL"),
MB_OK);}
// File: SampleDLL.h//#ifndef INDLL_H#define INDLL_H#ifdef EXPORTING_DLLextern __declspec(dllexport) void HelloWorld() ;#elseextern __declspec(dllimport) void HelloWorld() ;#endif#endif

下面的代码是一个“Win32 应用程序”项目的示例,该示例调用 SampleDLL DLL 中的导出 DLL 函数。

// SampleApp.cpp //#include "stdafx.h"#include "sampleDLL.h"int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ HelloWorld(); return 0;}

注意:在加载时动态链接中,您必须链接在生成 SampleDLL 项目时创建的 SampleDLL.lib 导入库。



在运行时动态链接中,您应使用与以下代码类似的代码来调用 SampleDLL.dll 导出 DLL 函数。

...typedef VOID (*DLLPROC) (LPTSTR);...HINSTANCE hinstDLL;DLLPROC HelloWorld;BOOL fFreeDLL;hinstDLL = LoadLibrary("sampleDLL.dll");if (hinstDLL != NULL){ HelloWorld = (DLLPROC) GetProcAddress(hinstDLL, "HelloWorld"); if (HelloWorld != NULL) (HelloWorld);
fFreeDLL = FreeLibrary(hinstDLL);}...

当您编译和链接 SampleDLL 应用程序时,Windows 操作系统将按照以下顺序在下列位置中搜索 SampleDLL DLL:

  1. 应用程序文件夹
  2. 当前文件夹
  3. Windows 系统文件夹



    注意GetSystemDirectory 函数返回 Windows 系统文件夹的路径。
  4. Windows 文件夹



    注意GetWindowsDirectory 函数返回 Windows 文件夹的路径。

vc调用dll 示例的更多相关文章

  1. VC调用DLL

    VC调用DLL   调用DLL有两种方法:静态调用和动态调用. (一).静态调用其步骤如下: 1.把你的youApp.DLL拷到你目标工程(需调用youApp.DLL的工程)的Debug目录下; 2. ...

  2. VC动态调用DLL

    1. //函数指针声明 typedef int (_stdcall MYDLLFUN)(char* _pcOut, /*INOUT*/int *_piOutBufLen, char* _pcIn, i ...

  3. 在VC中创建并调用DLL

    转自:http://express.ruanko.com/ruanko-express_45/technologyexchange6.html 一.DLL简介 1.什么是DLL? 动态链接库英文为DL ...

  4. VC++创建、调用dll的方法步骤

    文章来源:http://www.cnblogs.com/houkai/archive/2013/06/05/3119513.html 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有 ...

  5. c++builder调用VC的dll以及VC调用c++builder的dll

    解析__cdecl,__fastcall, __stdcall 的不同:在函数调用过程中,会使用堆栈,这三个表示不同的堆栈调用方式和释放方式. 比如说__cdecl,它是标准的c方法的堆栈调用方式,就 ...

  6. c++builder调用vc的dll

    $bcb/bin目录中有个implib.exe 把你的vc.dll和implib.exe复制到c盘根目录下 运行cmd 进入c盘根目录执行 c:\implib -a cb.lib vc.dll 会生成 ...

  7. VC调用易语言DLL

    易语言方面: .版本 .子程序 show, , 公开 ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中. ***注意不 ...

  8. DLL DEF文件编写方法 VC++ 调用、调试DLL的方法 显式(静态)调用、隐式(动态)调用

    DLL 文件编写方法: 1.建立DLL工程 2.声明.定义要导出的函数 BOOL WINAPI InitDlg( HWND hTabctrl,TShareMem* pTshare,CRect* prc ...

  9. VC++ 创建及调用Dll

    一._stdcall 被这个关键字修饰的函数,其参数都是从右向左通过堆栈传递的(__fastcall 的前面部分由ecx,edx传), 函数调用在返回前要由被调用者清理堆栈. 这个关键字主要见于Mic ...

随机推荐

  1. 【jmeter】HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults

    Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cache Manager.HTTP Authorization Manager.HTTP Cookie Manager.HTT ...

  2. php 添加redis扩展(二)

    php代码操作redis 1.连接 <?php //连接本地的 Redis 服务 $redis = new Redis(); $redis->connect('127.0.0.1', 63 ...

  3. C++设计新思维的traits和policy

    http://blog.csdn.net/zhoudaxia/article/details/4486487 这篇博客讲得挺清楚的,本来想自己写写看总结下的,不过看了下这个文章已经写得很清楚了,倒没有 ...

  4. Java的外部类和内部类+静态变量和非静态变量的组合关系

    看的李刚<疯狂java讲义>,里面讲内部类的地方感觉有点散而且不全,看完之后还是不十分清楚到底怎么用,于是自己写了个程序测试了一下.看如下代码,即可知道外部类和内部类+静态成员和非静态成员 ...

  5. PYTHON对文件及文件夹的一些操作

    python中对文件.文件夹的操作需要涉及到os模块和shutil模块. 创建文件:1) os.mknod("test.txt") 创建空文件2) open("test. ...

  6. @RequesParam注解源码解析

  7. 26种提高ASP.NET网站访问性能的优化方法 .

    1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池 ...

  8. IGS_学习笔记06_IREP发布客户化集成接口为Web Service(案例)

    2015-01-03 Created By BaoXinjian

  9. Educational Codeforces Round 15 Powers of Two

    Powers of Two 题意: 让求ai+aj=2的x次幂的数有几对,且i < j. 题解: 首先要知道,排完序对答案是没有影响的,比如样例7 1一对,和1 7一对是样的,所以就可以排序之后 ...

  10. suibi

    测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等. 我所了解的模块接口测试大体分为两类:模块接口测试和web接口测试 模块接口测试是单元测试的基础.它主要测试模块的调用 ...