共用方式為


編譯器警告 (層級 2) C4275

non - DLL 介面類別別 'class_1' 作為 DLL 介面類別別 ' class_2 ' 的基底

匯出的類別衍生自未匯出的類別。

若要將具有 __declspec(dllexport) 的類別匯出時資料損毀的可能性降到最低,請確定:

  • 所有靜態資料都是透過從 DLL 匯出的函式來存取。

  • 類別的內嵌方法無法修改靜態資料。

  • 類別中沒有任何內嵌方法會使用 CRT 函式或其他使用靜態資料的程式庫函式。

  • 沒有內嵌類別函式會使用 CRT 函式或其他程式庫函式,您可以在其中存取靜態資料。

  • 您的類別沒有任何方法(不論內嵌為何),都可以使用 EXE 和 DLL 中的具現化具有靜態資料差異的類型。

您可以藉由定義使用虛擬函式定義類別的 DLL,以及您可以呼叫的函式來具現化和刪除型別物件的函式,以避免匯出類別。 然後,您可以直接在 類型上呼叫虛擬函式。

如果您衍生自 C++ 標準程式庫中的類型、編譯偵錯版本 ( /MTd ),以及編譯編譯器錯誤訊息參考 _Container_base 的位置,則可以在 Visual C++ 中忽略 C4275。

// C4275.cpp
// compile with: /EHsc /MTd /W2 /c
#include <vector>
using namespace std;
class Node;
class __declspec(dllimport) VecWrapper : vector<Node *> {};   // C4275