簡體   English   中英

__declspec(dllexport)自定義類型變量

[英]__declspec (dllexport) custom type variable

我正在研究具有多個項目的Visual Studio解決方案(Visual Studio 2013)。 一個項目用於生成.dll文件,其他項目使用該.dll文件並生成.exe文件。 當我導出標准類型變量時,一切正常。 但是如果我要使用自定義類型,則會出現編譯錯誤。 這是一個例子

// Dll.cpp
#define DllExport __declspec (dllexport)
DllExport int maxPackSize = 20;
// my custom type
struct DllExport Header
{
    int m_data;    // some data
};
DllExport Header qHead = { 100 };


// Exe.cpp
#define DllImport __declspec (dllimport)
DllImport extern int packetSize;    // OK

struct DllImport Header;
DllImport extern Header qHead;      // leads to an error

當我在Exe.cpp使用qHead ,在該行上出現編譯錯誤。 錯誤就像

錯誤C2027:使用未定義類型“標頭”

我究竟做錯了什么? 有任何想法嗎?

您收到的錯誤消息是編譯器錯誤(不是鏈接器錯誤!)。 您需要先定義Header然后再使用。

您可以移動struct DllExport Header { ... }; 到單獨的頭文件(例如Dll.h ),然后在Exe.cpp #include "Dll.h"

您需要在標頭中導出自定義類型,以便您的.exe可以看到該類型。 例如,

Dll.h

#ifdef EXPORT_SYMBOLS
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif

struct DLL_EXPORT Header
{
   int m_data;
};

執行文件

#include "Dll.h"
Header qHead;

您需要將EXPORT_SYMBOLS添加到Dll的預處理器標志中,以便切換正確的__declspec宏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM