zoukankan      html  css  js  c++  java
  • 【win32编程学习】 调用dll

    上一篇说到如何创建一个dll 本篇讲一下如何调用dll。

    1.创建一个程序来调用我们的dll

    a.new project 选择 window console

    b.第二步选择next 第三步:application type:console application 点击finish

    c.工程创建完毕,里面有三个文件stdafx.h  stdafx.cpp  dll_demo_testcase.cpp 。

    2. dll调用方法介绍

    我们要调用dll_demo.dll,有两种方法:

    (1)隐式连接  (2)显示链接

    后面我们一一道来

    3.隐式连接 调用dll

    a.在工程文件夹新建一个同级common目录保存生成的dll和lib

    b.拷贝生成的dll_demo.dll 和 dll_demo.h到当前工程目录

    c.在工程配置linker-》Additional Library Directories中添加common用于引用lib

    d. stdafx.h添加dll_demo.h头文件和对lib包含

    // stdafx.h : include file for standard system include files,
    // or project specific include files that are used frequently, but
    // are changed infrequently
    //
    
    #pragma once
    
    #ifndef _WIN32_WINNT		// Allow use of features specific to Windows XP or later.                   
    #define _WIN32_WINNT 0x0501	// Change this to the appropriate value to target other versions of Windows.
    #endif						
    
    #include <stdio.h>
    #include <tchar.h>
    #include "my_dll.h"
    
    #pragma comment(lib, "dll_demo")
    
    
    // TODO: reference additional headers your program requires here
    

     e. 回到 dll_demo_testcase.cpp 中的代码,这时候我们可以再 _tmain中添加我们的测试代码

    #include "stdafx.h"
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        SayHello();
          std::cout<< Add(5, 6);
          system("pause"); return 0; }

     f. F5执行 会在控制台打印信息

    4.显示连接调用

    显示连接就是利用windows 的API LoadLibrary (LoadLibraryEx) 来动态加载dll,不需要头文件,只需要添加相应代码

    // my_dll_testcase.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <Windows.h>
    
    //定义函数指针 typedef int (*AddFunc)(int,int); typedef void (*HelloFunc)(); int _tmain(int argc, _TCHAR* argv[]) { AddFunc _AddFunc; HelloFunc _HelloFunc; HINSTANCE hInstLibrary = LoadLibrary(_T("dll_demo.dll")); if (hInstLibrary == NULL) { FreeLibrary(hInstLibrary); } _AddFunc = (AddFunc)GetProcAddress(hInstLibrary, "Add"); _HelloFunc = (HelloFunc)GetProcAddress(hInstLibrary, "SayHello"); if ((_AddFunc == NULL) || (_HelloFunc == NULL)) { FreeLibrary(hInstLibrary); } std::cout << _AddFunc(8, 10) << std::endl; _HelloFunc(); std::cin.get();
         //使用完毕一定要释放 FreeLibrary(hInstLibrary); return (1); }
  • 相关阅读:
    打印出从1到最大的n位十进制数
    排序算法--(二)
    排序算法 (-)
    两个栈实现一个队列
    C++ 模板类解析
    根据先序遍历中序遍历重建二叉树
    格式化时间
    用js实现冒泡排序
    接口和抽象类的区别
    解析json
  • 原文地址:https://www.cnblogs.com/justlikethat/p/3419410.html
Copyright © 2011-2022 走看看