首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dllimport代替dllexport

使用dllimport代替dllexport
EN

Stack Overflow用户
提问于 2019-09-27 16:48:55
回答 1查看 198关注 0票数 1

在Visual 2015中构建dll时,我似乎能够交替使用__declspec(dllexport)__declspec(dllimport)。在创建DLL时,我会想到dllexport命令是必需的,但似乎dllexportdllimport都是足够的,我有以下头文件声明了一个简单的add()函数:

add.h

代码语言:javascript
复制
#pragma once

#ifdef ADDDLL_EXPORTS
#define ADDDLL_API __declspec(dllexport)
#else
#define ADDDLL_API __declspec(dllimport)
#endif

ADDDLL_API int add(int x, int y);

使用cpp文件中的下列定义:

add.cpp

代码语言:javascript
复制
#include "add.h"

int add(int x, int y)
{
    return x + y;
}

无论ADDDLL_EXPORTS是在配置属性>预处理器>预处理器定义中定义的,我似乎都能够使用构建的DLL。例如,在一个将.lib文件作为附加依赖项包含的单独项目(配置属性>链接器>输入>附加依赖项)中,我有以下代码运行

main.cpp

代码语言:javascript
复制
#include <iostream>
#include "add.h"

int main()
{
    int sum = add(4, 5);
    std::cout << "sum = " << sum << std::endl;
    std::system("pause");
    return 0;
}

任何有洞察力的人都很感激。如果需要更多的信息,请告诉我。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-27 20:58:13

如果仔细查看,您将看到DLL项目编译时带有警告,如下所示:

代码语言:javascript
复制
 c:\yourproject\add.cpp(3,1):warning C4273: 'add': inconsistent dll linkage

编译器知道你做得不好。不应定义dllimport函数,而只应声明它。因此,当编译器看到定义时,它假设应该使用dllexport,因为这是错误最合理的解决方案。

这是treat compiler warnings as errors的一个很好的实践。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58138630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档