0

すべてのメンバー関数が純粋な仮想関数である抽象クラスを持つ dll があります。これらの関数を呼び出すアプリケーションを作成しようとしています。これらの純粋仮想関数を呼び出すために必要な手順は何ですか?

これは単なるプロトタイプです

抽象クラスのヘッダー ファイル: interface.h [これらはエクスポートされた関数です]

class MathFuncExport {

public:

    virtual int Add(int a, int b)=0;

    MathFuncExport(){};
    virtual ~MathFuncExport(){};
};

dll のヘッダー ファイル: MathFuncDll.h

#include "intf.h"

class MyMathFuncs : public MathFuncExport
{
public:
    MyMathFuncs(){};
    virtual ~MyMathFuncs(){};
    virtual int Add(int a, int b);
};

実装: MyMathFunsDll.Cpp ファイル

#include "MathFuncDll.h"

int MyMathFuncs::Add(int a, int b)
{
    return a + b;
}

これによりdllが作成されましたが、抽象クラスで関数を呼び出すことができないか、ここにリンクがありません. この問題を解決するために私を助けてください。

ありがとう

4

1 に答える 1

0

純粋な仮想を呼び出すことはできません。これらは、関数の実装を強制するために実装されています。基本クラスは DLL にあるため、他のクラスの派生に使用するには、クラスをエクスポートする必要があります。

クラスをエクスポートする最も簡単な方法は、暗黙的なリンクを使用することです。この方法では、クラス宣言とインポート ライブラリのヘッダーが必要です。さまざまなリンケージの詳細については、このリンクを確認してください

ちょっとしたデモとして、Win32 dll を作成します。必要に応じて MFC サポートを確認し、[シンボルのエクスポート] ボックスをオンにします。

これにより、サンプル クラスとグローバル変数のエクスポートを含む dll が作成されます。特別なマクロが作成されているヘッダー ファイルを見てください。DLL (エクスポート) と、この DLL にリンクする実行可能ファイル (インポート) の意味が異なります。

暗黙的なリンクの使用方法を理解すると、実行可能モジュールでコードを使用しているかのように、dll の基本クラスからクラスを派生させることができます。

于 2012-06-07T22:08:10.230 に答える