vs中预定义宏
在新建⼀个dll空项⽬时,按如下步骤:
新建 -> 项⽬ -> win32控制台程序 -> application setting 中选择 "DLL" 和“空项⽬” -> 完成
查看⼯程中的预定义宏,
在,Solution Explorer中,右键项⽬名称,选择“属性”,选择“c/c++栏⽬下的第三项“preprocessor”,然后在右侧的栏⽬中可以看到
有如下的预定义宏:
WIN32
_DEBUG
_WINDOWS
_USRDLL
DLL_EXPORTS
(ps:dll⼯程中会⾃动添加⼀个DLL_EXPORTS预定义,在属性—c\c++ —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();int函数啥意思
导出类⽤ 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)c\c++ ->general ->additional include directories⾥⾯添加头⽂件⽬录
2)linker -> general ->additional library directories ⾥添加lib⽂件的⽬录
3)linker ->input ->additonal dependencies ⾥添加lib的⽂件名
编译通过后⽤⾏,会提⽰丢失dll.dll⽂件
解决:将dll.dll放在和exe同⼀⽬录下或放在c:\windows\system32⽬录下(Win64位操作系统且dll.dll不是64位⽽是32位的话放在c:\windows\syswow64⽬录下)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。