zoukankan      html  css  js  c++  java
  • vc调用dll 示例

    其实,调用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 文件夹的路径。
  • 相关阅读:
    (转)iPhone开发经典语录集锦
    在iPone环境下要保存数据
    DevExpress自定义控件 ComboBoxEdit ,RepositoryItemComboBox,实现按拼音字母检索
    常用IPHONE 编程 基础代码
    使用Locating 系统查询手机号码归属地
    JUnit4使用 实例+基础介绍
    5分钟快速了解JSON,实例项目动手做
    eclipse常用快捷键
    Ubuntu12.04下JDK、Eclipse的安装,在linux终端中用命令启动eclipse
    Jackson 框架,轻易转换JSON
  • 原文地址:https://www.cnblogs.com/sharecenter/p/5620997.html
Copyright © 2011-2022 走看看