zoukankan      html  css  js  c++  java
  • C++编写 动态链接库dll 和 调用dll

    参考:https://jingyan.baidu.com/article/ff42efa92c49cfc19e2202fd.html   

    和htps://jingyan.baidu.com/article/ff411625c7e60812e48237d5.html

    和https://blog.csdn.net/baidu_30174103/article/details/80514925

    一、首先遇到了VS2015一新建项目就出现未将对象引用设置到对象的实例的问题,参考:https://www.zhihu.com/question/37119592?sort=created 折腾半天,包括  打开--C:Users用户名AppDataLocalMicrosoftVisualStudio,然后把文件全部删了  也没解决。

    VS2017-工具-导入和导出设置-重置所有选项 -重置为C++ 环境   依旧不行。

    最后,参考:https://www.itsvse.com/thread-4221-1-1.html 用以下办法,解决了问题。

     1、通过命令提示行工具进入VS安装目录下的Common7IDE
    
    2、执行devenv.exe /setup /resetuserdata /resetsettings
    
    3、重启VS

    二、正式编写DLL

    1、VS2017     -    visual C++   -  windows桌面  -  动态链接库(DLL)  ,名称为Dll

    2、在Dll.cpp中写以下代码

    // Dll.cpp : 定义 DLL 应用程序的导出函数。
    //
    
    #include "stdafx.h"
    
    extern "C" __declspec(dllexport) int __stdcall ADD(int a, int b) {
        return a + b;
    }

    3、编译,成功。

    4、找到VS自带的dumpbin,并加入到环境变量中。执行:dumpbin Dll.dll    ,结果没有看到函数名。

    三、参考https://blog.csdn.net/Call_Coder/article/details/79331686 重新开始

    1、Visual C++->Windows桌面->动态链接库DLL->起名字为first

    2, 右侧 头文件->添加->新建项         ,选择头文件,起名字为first

    3, 打开first.cpp源文件,内容改为:

    // first.cpp : 定义 DLL 应用程序的导出函数。
    //
    #include "stdafx.h"
    #include "first.h"
    #include <Windows.h>
    #include <iostream>
    using namespace std;
    void show(void)
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
        cout << "";
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN);
        cout << "";
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_BLUE);
        cout << ",";
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_BLUE);
        cout << "";
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
        cout << "";
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE);
        cout << "";
    }

    4、将first.h 头文件改为

    #pragma once
    
    __declspec(dllexport) void show(void);

    5、生成解决方案。再次用dumpbin查看,和前面的一样?继续吧

    6、新建一个C++控制台项目 test  ,把刚才的first.h和first.lib都复制到test的项目文件夹里,把first.dll放到最外边的那个Debug文件夹里

    7, 在项目->属性->C/C++->代码生成->运行库->改成DLL(/MDd)然后,在右侧解决方案中的头文件中添加first.h 资源文件中添加first.lib

    8、在test.cpp中写

    #include "stdafx.h"
    #include "first.h"
     
    int main()
    {
        show();
        while (true)
        {
     
        }
        return 0;
    }

    重新生成解决方案,运行test.exe.成功

  • 相关阅读:
    BeautifulSoup的基本用法
    [leedcode 189] Rotate Array
    [leedcode 187] Repeated DNA Sequences
    [leedcode 179] Largest Number
    [leedcode 174] Dungeon Game
    [leedcode 173] Binary Search Tree Iterator
    [leedcode 172] Factorial Trailing Zeroes
    [leedcode 171] Excel Sheet Column Number
    [leedcode 169] Majority Element
    [leedcode 168] Excel Sheet Column Title
  • 原文地址:https://www.cnblogs.com/pu369/p/10028468.html
Copyright © 2011-2022 走看看