0

それで、私はエミュレーションを何年も延期し、どこから始めればよいかわからなかった後、エミュレーションを試し始めたところです。最初のエミュレーターをうまく書くことができました! 現在、コードを再利用して他のシステムをエミュレートできるように、コードを整理しています。私は実行可能ファイルとしてコンパイルする種類の共有フロントエンド「プラットフォーム ハンドラー」を持つという考えをいじっていましたが、エミュレートされたシステム コードをプラットフォーム ハンドラーが利用可能なものを識別してインスタンス化するために使用する dll にコンパイルします。 . これにより、コードを異なるプロジェクトに分割し、2 つの異なるソリューションを作成するのではなく、より多くの機能を備えた大型のフロント エンドまたは合理化された「ゲームのみ」を使用して、それらの間で同じ dll を共有するオプションを開いたままにすることができます。

dllと実行可能ファイルをコンパイルする方法は知っていますが、実行可能ファイルをカスタムdllにリンクして、そこからクラスをインスタンス化する方法がわかりません。私がやろうとしていることが技術的に可能かどうかさえわかりません。dll クラスは静的である必要がありますか? 私はこれまでにこのようなコードを書いたことはなく、カスタム dll で多くのことをしたことさえないので、助けやアイデアをいただければ幸いです。ちなみにVisual C++ 2010を使っています。誰にでもアドバイスがあれば、事前に感謝します。

4

1 に答える 1

0

あなたは本当に多くの異なることをする必要はありません。関数の場合と同じように、dll からクラスをエクスポートするだけです。通常どおり、アプリにヘッダーと、生成されたライブラリへのリンクを含めます。このページを参照してください: http://msdn.microsoft.com/en-us/library/81h27t8c%28v=vs.80%29.aspx

Example.h

#ifdef DLL_EXPORT
#define EXPORT_API __declspec(dllexport)
#else
#define EXPORT_API __declspec(dllimport)
#endif

class EXPORT_API Example
{
public:
    Example();
    ~Example();

    int SomeMethod();
};

int EXPORT_API ExampleFuncion();

Example.cpp

#include "Example.h"

Example::Example()
{
    // construct stuff
}

Example::~Example()
{
    // destruct stuff
}

int Example::SomeMethod()
{
    // do stuff
    return 0;
}

int EXPORT_API ExampleFunction()
{
    return 0;
}

dll プロジェクトで、定義DLL_EXPORTしてビルドします。.libと出力が得られ.dllます。dll を使用するメイン プロジェクトでは、ヘッダーをインクルードし、.lib. DLL_EXPORTメイン プロジェクトでシンボルを定義しないでください.dll。アプリケーションが見つけられる場所にあることを確認してください。

本当に賢くしたいのなら、この問題は工場の設計パターンに悲鳴を上げています。インターフェースを適切に設計すれば、DLL がロードされたときにアプリケーションに実装を登録することができます。メインの実行可能ファイルを再構築することなく、永久に拡張できます。

于 2011-03-16T18:21:42.583 に答える