2011-03-16 11 views
0

何年も前にエミュレーションを開始し、どこから始めたらいいのか分からずに初めてエミュレータを作成しました。今では、コードを再構成して他のシステムをエミュレートできるようにコードを整理しています。私はプラットフォームハンドラが利用可能なものを特定してインスタンス化するために使用するdllにエミュレートされたシステムコードをコンパイルするのに対し、実行可能ファイルとしてコンパイルするのは、共有のフロントエンド "プラットフォームハンドラ"を持っています。 。これにより、私のコードを別のプロジェクトに分けることができ、2つの異なるソリューションを作るのではなく、より多くの機能や合理化された "ゲームのみ"のバルキーなフロントエンドを使用して同じオプションを共有することができます。VC++:DLLを「サブプログラム」として使用する

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

+0

これは、MSDNライブラリで詳しく説明されています。ここをクリックしてください:http://msdn.microsoft.com/en-us/library/1ez7dh12.aspx –

答えて

0

あなたは本当に大きな違いはありません。関数のようにdllからクラスをエクスポートするだけです。あなたのアプリでは、通常のように、ヘッダと生成されたlibへのリンクを含めます。 、あなたの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(); 

#include "Example.h" 

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

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

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

int EXPORT_API ExampleFunction() 
{ 
    return 0; 
} 

Example.cpp

DLL_EXPORTを定義し、構築する:このページを参照してください。 .lib.dllの出力が得られます。 DLLを使用するメインプロジェクトでは、何もする必要はありません。 .libのヘッダーとリンクを含めてください。メインプロジェクトに DLL_EXPORTシンボルを定義しておらず、 .dllがあなたのアプリケーションのどこかにあることを確認してください。

あなたが本当に巧みになりたいのであれば、この問題は工場設計パターンで叫んでいます。インターフェイスを十分に設計すれば、DLLがロードされたときにDLLをアプリケーションに登録させることができます。主な実行可能ファイルを再構築することなく、永遠に拡張することができます。

+0

これは、私がやりたいこととよく似ています。このOSは特定ですか?これまでのところ、私のアプリケーションはクロスプラットフォームでフレンドリーで、私は本当にそれをそのままにしたいと思っています。私はMSDNの方向に指されているにもかかわらず、良いリソースに関係なく、私は神経質になる。 – user663000

+0

いいえ、私はWindowsとLinuxの両方でやりました。共有オブジェクトの読み込みをサポートするどのプラットフォームでも動作すると仮定します。 Linux上でIIRCを使用する場合、特別な作業は必要ありません。共有オブジェクト(dll)を作成してリンクするだけです。 Windowsでは、リンクで説明されているように、エクスポートされたクラスを明示的に宣言する必要があります。私は便利なコードスニペットを持っていないし、私は何かを見逃している可能性が高いので、メモリから1つを作ることをためらう。 googleのdllimport/dllexportを見てください。私は仕事から家に帰ってきて、より良い事例を提供しようとしています。 –

+0

すごくありがとう!これは私が物事をしたいのとまったく同じように見えます。ファクトリメソッドは、プラットフォームハンドラを設定するための完璧な方法のように聞こえます。オレのデザインパターンの本を捨ててコーディングする時間! – user663000

関連する問題