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目录下)
  • 相关阅读:
    莫队
    NOIP2010_T4_引水入城 bfs+贪心
    拉灯游戏 搜索
    种花小游戏 随机化搜索
    [usaco2003feb]impster
    P1265 公路修建 (prim)
    P3378 【模板】堆
    并查集 模板
    P2661 信息传递
    P1828 香甜的黄油 Sweet Butter (spfa)
  • 原文地址:https://www.cnblogs.com/wangjz/p/4809320.html
Copyright © 2011-2022 走看看