- PR -

親画面(EXE)と子画面(DLL)の作成

投稿者投稿内容
mei
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 114
投稿日時: 2003-08-16 14:45
引用:

優希さんの書き込み (2003-08-16 13:58) より:
この方法だと、プロジェクトに対して"参照"を行なうってことなんですよね。
だとすると、子画面を作ってもらった人から、
プロジェクトごと貰わないといけないってことなのでしょうか!?
単純にDLLだけを貰うのではなくって。



いえ、単純にDLLを貰うだけで良いですよ。

開発を進める手順としては、
子画面を開発する人が守るべきインタフェースを決定します。
それに基づいてインタフェース型を含むDLLを作成します。
#サンプルで言うところのISub.dllです。

子画面の開発者にISub.dllを渡し、
インタフェース型を継承してクラスを作ってもらいます。
#クラス名も固定にした方がより単純になります。

優希さんは、子画面の開発者からDLL(例ではSub1.dll,Sub2.dll)を受け取って、
モジュール用のディレクトリにコピーします。
あとは、DLLをダイナミックロードするように作ってあるメインモジュール(例ではMain.exe)を動かせば、設定ファイルに従ってSub1.dllかSub2.dllを読み込んで動作します。Main.exeの再コンパイルは不要です。
#もちろん、設定ファイルでのDLLの指定方法は決めておく必要はあります。

あくまでも、Main.exeが参照するのはISub.dllだけです。

引用:

ソリューションエクスプローラの右クリックでも、
該当する見当たりません。
各々プロジェクトを右クリックすると、「Web 参照の追加」とありますが、
これも違うようです。



>削除しました。
私のところでは、こんなメニューとダイアログが表示されています。
.NET2002でも同様のダイアログはあるはずなので、探してみて下さい。

#例のごとく、優希さんが確認し終わったら削除します。


[ メッセージ編集済み 編集者: mei 編集日時 2003-08-16 15:47 ]
優希
ベテラン
会議室デビュー日: 2003/08/12
投稿数: 92
投稿日時: 2003-08-16 15:21
お疲れ様です。

引用:

あくまでも、Main.exeが参照するのはISub.dllだけです。


そうですよねぇ。
DLLのみを貰えば、済むはずですもんね。

----------------------
Main.exe ⇒ ISub.dll
Sub1.dll ⇒ ISub.dll
Sub2.dll ⇒ ISub.dll
----------------------
上記のような参照をするんですね。

DLLのコピーと参照の設定。
この2点ですね?


VS.NET2002 で探してみたのですが、
「追加」の次に「Web 参照の追加」項目がきているので、
ちょうど「参照の追加」が抜けているんです。

他のメニューバーなども調べて見たんですけど、
ないです(^^

ちなみに、[プロジェクトの依存関係]でやってみたんですけど、
うまくいかなかったです。

もうしばらく、がんばってみます。
mei
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 114
投稿日時: 2003-08-16 17:02
引用:

優希さんの書き込み (2003-08-16 15:21) より:
----------------------
Main.exe ⇒ ISub.dll
Sub1.dll ⇒ ISub.dll
Sub2.dll ⇒ ISub.dll
----------------------
上記のような参照をするんですね。


はい、そうです。

引用:

VS.NET2002 で探してみたのですが、
「追加」の次に「Web 参照の追加」項目がきているので、
ちょうど「参照の追加」が抜けているんです。


#using <ISub.dll>
でも、良さそうですね。
Sub1,Sub2,Mainのそれぞれのヘッダに入れてみて下さい。

多分、これで大丈夫だと思うのですが、
もし駄目だったら、プロジェクトの設定C/C++のところで
#using参照の解決というのがあるので、そこにDLLがあるパスを追加してみて下さい。
それで、#usingで参照出来るようになるはずです。


[ メッセージ編集済み 編集者: mei 編集日時 2003-08-16 17:08 ]
優希
ベテラン
会議室デビュー日: 2003/08/12
投稿数: 92
投稿日時: 2003-08-17 00:55
引用:

#using <ISub.dll>
でも、良さそうですね。
Sub1,Sub2,Mainのそれぞれのヘッダに入れてみて下さい。



分かりました。
月曜に作業をしてみて、また報告いたしますので、
その際はよろしくお願い致します。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-08-18 09:05
全く関係ないですが。。。。

 下の「プロファイル」から、「プライベートメッセージ」というものを送ることができます。登録してあるメールアドレスに、「プライベートメールが届きました」というメールが送信されます。お互いのメールアドレスが知られることはありません。“削除されているもの”については、こちらでやり取りされては如何でしょうか。

#見難かったもので
優希
ベテラン
会議室デビュー日: 2003/08/12
投稿数: 92
投稿日時: 2003-08-18 12:19
# Jittaさん、ご指摘ありがとうございます。

作業報告をしたいと思います。

「#using <ISub.dll>」をSub1.dllとMain.exeに追加しました。
それから、Mainのエントリポイントでエラーが多く出ていた為、
【int __stdcall WinMain()】のように置き換えました。

それで実行をしてみると、以下のところでエラーになってしまいます。
コード:
////Main.exe////
・・・中略・・・
this->Load += new System::EventHandler(this, Form1_Load);
this->ResumeLayout(false); ←ここで止まります



エラー内容は以下の通りでした。
----------------------------------------------------
'System.IO.FileNotFoundException' のハンドルされていない例外が Main.exe で発生しました。
追加情報 : ファイルまたはアセンブリ名 ISub、またはその依存関係の 1 つが見つかりませんでした。
----------------------------------------------------

それで確認の為、Mainフォルダ内にSub1.dllとISub.dllが存在するのを確認しました。

次の手段として、
【#using参照の解決】にISub.dllのあるパス
(ISub\debugフォルダ、またはMainフォルダ)を指定したのですが、
先程のエラーで終了してしまいます。


何かコーディングのミスがあるのでしょうか?
ソースは、meiさんに頂いたものをしようしているつもりですが…。

何か分かることがありましたら、宜しくお願い致します。
それまで、いろいろ試してみます。


mei
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 114
投稿日時: 2003-08-18 21:14
引用:

Jittaさんの書き込み (2003-08-18 09:05) より:
 下の「プロファイル」から、「プライベートメッセージ」というものを送ることができます。



失礼しました。

これより先は細かい内容になり、公の場でやり取りするのも気が引けますので、
これ以降の話はプライベートメッセージで行います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-08-19 08:09
おもしろい話題なので、結果は教えてくださいね?

スキルアップ/キャリアアップ(JOB@IT)