關於dll函數修飾_declspec(dllexport)的問題

CSDN問答 2022-01-07 23:36:29 阅读数:321

dll declspec dllexport

 在學調用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有導出 ,而且調用也正常




采納答案:

可能是因為加了 extern "C"



其他答案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

 

版权声明:本文为[CSDN問答]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201072336288246.html