[英]__declspec(dllexport) and __declspec(dllimport) in C++
[英]__declspec(dllimport/dllexport) and inheritance
給定具有以下類的DLL:
#define DLLAPI __declspec(...)
class DLLAPI Base
{
public:
virtual void B();
};
class Derived : public Base
{
public:
virtual void B();
virtual void D();
};
即使“DLLAPI”關鍵字未應用於類定義(至少,不是直接),我的“派生”類是否可以在dll之外顯示?
“D()”功能是否可見?
謝謝
您的DLL不會導出類Derived。 類不繼承導出。 同時添加DLLAPI。
另請注意,類成員默認使用私有輔助功能,因此無法訪問任何方法。 但是,我確實看到Base :: B()在我的測試中被導出。 DLL使用代碼中的C ++標頭會標記錯誤,但我想知道你是否在那里調整了標頭,如果你可以欺騙它。
無論如何,如果你在你的DLL中實例化了一個Derived(通過另一個入口點),虛擬表應該仍然可以工作,所以如果你這樣做了:
Base* b = getTheDerived(); b->B();
你會調用Derived :: B()。
您可以通過鍵入從Visual Studio命令shell中找到
link /dump /exports <yourdll>
如果導出它們,您將看到函數的“裝飾名稱”。 要查看它們的人類可讀格式,請復制粘貼一個並執行
undname <decorated name>
不,Derived將不會在DLL外部顯示。 為了導出派生類,您還必須將DLLAPI宏應用於派生類。
您必須使基類和派生類都可導出,
http://msdn.microsoft.com/en-us/library/81h27t8c.aspx
All base classes of an exportable class must be exportable. If not, a compiler
warning is generated.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.