質問

以下のクラスで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.
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top