zoukankan      html  css  js  c++  java
  • vs中预定义宏

    在新建一个dll空项目时,按如下步骤:

    新建 -> 项目 -> win32控制台程序 -> application setting 中选择 "DLL" 和“空项目” -> 完成

    查看工程中的预定义宏,

    在,Solution Explorer中,右键项目名称, 选择“属性”, 选择“c/c++栏目下的第三项“preprocessor”,然后在右侧的栏目中可以看到

    有如下的预定义宏:

    WIN32
    _DEBUG
    _WINDOWS
    _USRDLL
    DLL_EXPORTS
    (ps:dll工程中会自动添加一个DLL_EXPORTS预定义,在属性—cc++ —preprocesspr里面)


    看一个dll头文件的例子:

    //dll.h
    #ifndef DLL_H
    #define DLL_H
    
    
    #ifdef DLL_EXPORTS
    #define DLLEXPORT __declspec(dllexport)
    #else
    #define DLLEXPORT __declspec(dllimport)
    #endif
    
    
    DLLEXPORT int add(int ,int);
    
    
    #endif
    中间一段的意思是: 如果在工程里添加预定义宏DLL_EXPORTS 那DLLEXPORT 就指代__declspec(dllexport) 用于dll的导出(函数 变量 类等)
    导出变量用 __declspec(dllexport) int a;
    导出函数用 __declspec(dllexport) void foo();
    导出类用 class __declspec(dllexport) a{};
    如果应用程序需要调用dll中的函数,则需要用__declspec(dllimport)修饰,因此当工程中不包含DLL_EXPORTS预定义时,DLLEXPORT 就指代__declspec(dllimport) 这样生成dll程序和调用dll的程序可以使用同一个头文件。
     
    然后再添加cpp文件
    //dll.cpp
    #include "dll.h"
    
    
    int add(int x,int y){
    return x+y;
    }

    这样编译以后就可以在工程的debug目录下就生成了dll和lib文件

    调用dll文件
    新建一个控制台程序calldll
    添加c++文件
    //calldll.cpp
    #include "dll.h"
    #include <iostream>
    int main(){
    int z;
    int x=1, y=2;
    z=add(x,y);
    std::cout<<z<<std::endl;
    }
    工程属性里设置
    1)cc++ ->general ->additional include directories里面添加头文件目录
    2)linker -> general ->additional library directories 里添加lib文件的目录
    3)linker ->input ->additonal dependencies 里添加lib的文件名
    编译通过后用行,会提示丢失dll.dll文件
    解决:将dll.dll放在和exe同一目录下或放在c:windowssystem32目录下(Win64位操作系统且dll.dll不是64位而是32位的话放在c:windowssyswow64目录下)
  • 相关阅读:
    MSSQL安全审计文件执行Rootkit-WarSQLKit
    组建自己的局域网服务器
    python openpyxl表格样式设置
    ssh 和 scp 命令访问非默认22端口。
    set | grep IFS
    Python: check if key exists in dictionary (6 Ways)
    在线Jinja2解析器
    FastApi教程|测试WebSockets
    QT Qstring的用法
    QT UI拖拽方法
  • 原文地址:https://www.cnblogs.com/wangjz/p/4809320.html
Copyright © 2011-2022 走看看