其实,调用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:
- 应用程序文件夹
- 当前文件夹
- Windows 系统文件夹
注意:GetSystemDirectory 函数返回 Windows 系统文件夹的路径。 - Windows 文件夹
注意:GetWindowsDirectory 函数返回 Windows 文件夹的路径。