CSDN_SDER
csdn_SDER
采纳率0%
2021-02-24 18:45

关于dll函数修饰_declspec(dllexport)的问题

10
已结题

 在学调用dll时候 了解到 dllexport 和 dllimport

在查阅资料后我的理解是只有加了dllexport 修饰的函数 类 数据才能被外部使用

但是在使用qt实际后我发现即使不加一样有导出,不懂是为什么 还是对dllexport 和 dllimport 理解有误

#ifndef HELLOWADD_H
#define HELLOWADD_H

#include "hellowadd_global.h"
extern "C" {

int myAdd (int , int);

}


#endif // HELLOWADD_H


#include "hellowadd.h"


int myAdd(int a, int b)
{
    return a + b ;
}

以上是dll内代码

 

一样可以看到函数myAdd有导出 ,而且调用也正常

  • 点赞
  • 收藏
  • 复制链接分享

2条回答

  • huanhuilong 幻灰龙 2月前

    _declspec(dllexport) 和 _declspec(dllimport) 用在从一个dll里导出符号,在另一个dll/exe里包含头文件,动态链接dll使用其导出的符号的时候

    • 如果你头文件和CPP文件都有,直接基于源代码使用当然不属于这种情况。
    • 如果你编译一个lib,另一个dll/exe使用这个lib也不属于这种情况。
    • 如果没有使用_declspec(dllexport),那么你可能使用了一个.def文件定义导出符号。
    • 导出类和类的成员时也有必要使用_declspec(dllexport)。

    _declspec(dllimport) 存在可选的情况。

    • 在导出函数时可以省略,但是导出变量时不能省略。
    • 但是导出函数时使用还是比较好,因为编译器明确知道这个信息后可以生成更高效的代码。

     

    参考:MSDN importing-into-an-application-using-declspec-dllimport

     

    点赞 评论 复制链接分享
  • niushaolongniuniu niushaolongniuniu 2月前

    可能是因为加了 extern "C"

    点赞 评论 复制链接分享

为你推荐