zoukankan      html  css  js  c++  java
  • 在VS工程里编译dll / 调用外部dll

    这个问题昨天请教了一下大神,记录之。

    1.编译dll

    创建一个新项目,Win32控制台应用程序,这里选DLL。这样的话编译过后会自动在Debug目录下生成dll文件。

    这样,会生成如下的目录:

    其中头文件里的第2、3个是自动生成的,源文件里的1、3个是自动生成的。

    我们只需要改动:

      在DllWithClass.h里写:

    extern "C" _declspec(dllexport)//导出
    float FunctionMultiply(float x, float y);

      这里第一行是用于DLL导出的,第二行是你所定义的功能函数的声明

      在DllWithClass.cpp里写:

    extern "C" _declspec(dllexport)
    float FunctionMultiply(float x, float y)
    {
        return x*y;
    }

      第一行对应.h里面的,注意不要打分号。然后就是定义函数体了。

      这样编译就会生成一个实现简单乘法的dll文件。

     

    2.调用dll

    建立一个Win32控制台应用程序,这里是为了生成.exe

    调用dll有三步所需要做的事情:

    1>代码部分,这里面只需要改动UseDllWithClass.cpp文件

    添加如下代码:

    #include "..DllWithClassDllWithClass.h"
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        float FunctionResult = FunctionMultiply(1.2f, 5.0f);
        printf("%f", FunctionResult);
        getchar();
        return 0;
    }

    其中对于被调用.dll文件的头文件的引用,使用了相对路径。这里有个小知识:由于. vcxproj这个文件的内容代表着.exe文件所在的目录

      ..表示着返回上一目录,所以这个查找的顺序是:从.exe返回上一级目录,再打开DllWithClass目录,找到DllWithClass.h

    为了方便,也可以直接把.dll文件放在.exe所在目录下,这样就可以直接#include "DllWithClass.h"

    2>打开项目属性-链接器-常规

    附加库目录里加上.lib文件所在的目录,同样可以使用相对路径:

    如果.lib文件直接放在.exe文件目录下,这里可以不用设置(所以最方便的方式还是把.h/.lib/.dll全放在.exe文件的目录下)

    3>打开项目属性-链接器-输入

    附加依赖项里加上.lib文件名

     

     

    完成这些设置,就可以直接调用封装在.dll文件里的函数了。

     

  • 相关阅读:
    使用Docker及k8s启动logstash服务
    在kubernetes上部署zookeeper,kafka集群
    k8s configmap 挂载配置文件
    k8s 安装 rabbitMQ 单机版
    aws 挂载efs (nfs)目录
    长白山游记
    RedHat 安装YUM软件
    mysql查询案例
    mysql子查询
    mysql联合查询
  • 原文地址:https://www.cnblogs.com/Rivrr/p/5667151.html
Copyright © 2011-2022 走看看