3

私はこの DLL プロジェクトを作成しており、コンパイラ固有のマクロは一切含めていません。

インポーター (.exe) ファイルはクリーンにコンパイルされ、DLL ファイルにメソッドをインポートした後にエラーは生成されません。それらは異なるプロジェクトにありますが、同じソリューションです。

これらの呼び出し規約を使用していないために、ここで物事を台無しにしますか?

私の DLL ファイルは名前空間にあり、OOP 方式で実装されています。

しかし、時々、またはほとんどの場合、.lib が生成されないため、DLL の設定を LIB に切り替え、生成された .lib ファイルをコピーして、再度 DLL ファイルに戻す必要があります。

また、使用しているライブラリが .dll ファイルなのか .lib ファイルなのかさえわかりません。

誰かが私にそれを明確に説明してくれますか?

編集

いつ使用するかについて本当に混乱している状況をいくつか追加します。

私はこれらを持っていると思います:

namespace
{

    class Base abstract
    {

    public:
        Base()
        {
            //initialize base components
        }
        virtual void func() = 0;

    public:

        //interface
    };

    class Derive : public Base
    {

    public:
        Derive();
        void func() override;

    private:

        //interface

    };

}

ここで使用する必要がdeclspec(dllexport)あります:

  • (やconstructorsなど) ?Base()Derive()

  • virtual機能?どこに置くの?派生またはベースで?または両方?

  • パブリック変数?(最悪!)

私は他のヘッダーファイルを見て、それに追加externします。ここで必要ですか?

これにより、すべてのコード構文が台無しになります

答えてください....

4

1 に答える 1

3

dllにあるはずのライブラリファイルにリンクしているように聞こえます。したがって、dllはまったく使用していません。すべてがexeファイルに入ります。

Microsoftは__declspec(dllexport)、dllにと__declspec(dllimportexeファイルに)を必要とします。それは複雑になるので、それを整理するためのマクロがあります。

CLASS_DECLSPEC

次に、コンパイラは、__declspec使用するのを分類します。

参照: http: //msdn.microsoft.com/en-us/library/8fskxacy (v = vs.80).aspx

于 2013-03-09T14:15:18.887 に答える