2012-03-01 9 views
0

私はこれまで同様の質問がされていることは知っていますが、それでも私には明らかではありません。DLLアクセスアプリケーションのデータ

私のアプリケーションには、ある種のグラフを表すためのクラス、例えばClassAppGraphがあります。私はClassAppGraphのオブジェクトを解析し何かを行うDLLを書く必要があります。

私のDLLは、アプリケーションからClassAppGraphのオブジェクトにどのようにアクセスできますか?

私はこのオブジェクトへのポインタをDLLからアプリケーションに送ることができますが、そのDLLがクラスの外観をどのように知っていますか、そのデータメンバーと関数は何ですか?アプリケーションクラスの宣言を含むDLLプロジェクトに.hファイルを含めましたか?

このような状況で他にどのような設計ができますか?

答えて

0

アプリケーションがDLLをロードするため、DLL内の同じ関数が共有され、DLL内の関数はすべてのアプリケーションプロセスメモリにアクセスできます。インスタンスをグローバルにアクセス可能にするだけです(例:グローバル静的変数)。 DLLのソースコードでは、ClassAppGraphのヘッダーファイルを含めると、ClassAppGraph *を直接DLLに使用できます。

+0

ランタイム環境では、クラス定義が両側で同じであるという妥当性検査はありません。これは、クラスバージョンと多くの微妙なこと(デフォルトの呼び出し規約、フィールドパッキング、その他のコンパイラフラグなど)の不一致が、対話によってエクスポートされたオブジェクトのDLLビューを破壊する可能性があることを意味します。 –

+0

アプリケーションとDLLの両方がOPによって書き込まれたようです。アプリケーションがまだ静的なlibとリンクしているので、私はバージョンの競合が問題になるとは思わない。 –

+0

@Cred King:インスタンスをグローバルにアクセス可能にすることは、オブジェクトをDLLに公開する唯一のオプションですか?オブジェクトのポインタをDLL内の関数のパラメータとして渡せませんか? – Ritesh

0

私はClassAppGraphクラスと実装をDLLに入れて、アプリケーションでDLLから実装を使用します。ほとんどの場合、私はDLLのために実際にClassBaseGraphを作成し、アプリケーションがそのクラスをカスタマイズする必要がある場合、継承することができます。

+0

私はDLLを最小限に保つ必要があり、クラスClassAppGraphとDLLへの実装を最後のオプションにする必要があります。 – Ritesh

関連する問題