__declspec(DLLIMPORT / DLLEXPORT)と継承
質問
以下のクラスで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によってエクスポートされません派生クラス。クラスはエクスポート継承しません。あまりにもそれにDLLAPIを追加します。
民間のアクセシビリティにあまりにもそのクラスのメンバーのデフォルトに注意してくださいので、あなたの方法のいずれもがアクセスできるようにはなりません。しかし、私は私のテストでエクスポートされている()ベース:: Bを見ています。 DLL-使用してコードでC ++ヘッダーには、フラグエラーをだろうが、あなたがそこに、ヘッダーを微調整した場合、あなたはそれをだますことができれば、私は、不思議ます。
あなたは(別のエントリ・ポイントを経由して)あなたのDLL内の派生インスタンス化しなかった場合は、とにかく、仮想テーブルはまだ動作するはずですので、あなたがやった場合:
Base* b = getTheDerived(); b->B();
あなたは)派生:: Bを(呼び出すと思います。
他のヒント
あなたが入力することにより、Visual Studioのコマンドシェルから見つけることができます。
link /dump /exports <yourdll>
それらが輸出されている場合は、は、機能のための「装飾名」を参照してくださいます。 1をコピー&ペーストしてください、彼らは人間が読める形式であるかを確認するには、
undname <decorated name>
いいえ、派生する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.
所属していません StackOverflow