C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: DLLの呼び出し方法について


(過去ログ 30 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■14226 / inTopicNo.1)  DLLの呼び出し方法について
  
□投稿者/ on0917 (2回)-(2008/02/13(Wed) 16:32:46)

分類:[VB.NET/VB2005] 

VB.NET2008でシステム開発中です。VB6時代にMDIフォームを使用してメニューのEXEから各EXEを起動していました。VB.NETに移行するにあたり各プログラムをDLLにすることとなり、MDI親フォームのメニュープログラムから各サブプログラムを呼び出すことにしました。各DLLをIMPORTSで定義してフォームを呼び出したりはできるようになりましたが、メニューテーブルに設定されている任意のDLLを呼び出すにはどうしたら良いかわかりません。(簡単に言うと例えば客先カスタマイズでプログラムを1本追加となったとします。今まではメニューテーブルにデータを1件追加して新規プログラムを所定の位置にコピーで良かったんですが、DLLにするとメニューの定義も変更しなくてはなりません。)

IMPORTS プログラム名A
IMPORTS プログラム名B

てな感じで・・・・・何か良い方法あったら教えてください。よろしくお願いします。

説明不足かもしれませんね。VB.NET初心者です。






引用返信 編集キー/
■14231 / inTopicNo.2)  Re[1]: DLLの呼び出し方法について
□投稿者/ Algol (4回)-(2008/02/13(Wed) 17:28:12)
2008/02/13(Wed) 18:01:32 編集(投稿者)
2008/02/13(Wed) 17:29:53 編集(投稿者)

No14226 (on0917 さん) に返信

はじめまして。Algolと申します。

少しややこしいかもですが、DLLを同じ.NETで開発しているのであればアセンブリ(DLL)の動的呼び出しでやってみては如何でしょうか。

C#ですが参考になると思います。
GoldFishさん 「動的にアセンブリを呼び出す」
http://athomejp.com/goldfish/vcs/assemblycall.asp

方法は、
1.特定のフォルダに画面分のDLLを設置
2.フォルダ内のDLLを動的呼び出しで確認、クラスを取得しインスタンス化
3.メニューに取得したクラスで設定する名称等を列挙
4.メニューから呼び出されるときに、取得したクラスで画面をインスタンス化し表示

大雑把ですがこんな感じで如何でしょう?

#一部訂正
# 1.特定のフォルダにDLLを設置 -> 1.特定のフォルダに画面分のDLLを設置
#一部訂正その2
# リンクの参照先を追記
引用返信 編集キー/
■14232 / inTopicNo.3)  Re[1]: DLLの呼び出し方法について
□投稿者/ まどか (441回)-(2008/02/13(Wed) 17:30:51)
いわゆるアプリが知らないDLLを動的に呼び出したいということですね。

ポイントは、リフレクション(Reflection名前空間)です。
あとはアプリとDLLの間に契約(Interface)を作ることです。
たとえば、
Public Interface IChildForm
ReadOnly Property Name() As String
ReadOnly Property MenuName() As String
Sub Initialize()
Sub Show()
Sub Close()
Sub Dispose()
End Interface
とか。
アプリが決まったDLLのフォルダを検索して、DLLがこのインターフェースを実装しているかをチェックし、
OKならインスタンスを作る、という感じです。
このインターフェースは単独のDLLにしてアプリとDLLの双方が参照できるようにしておきます。

・参考
どぼんさんの「Tips」「その他のTips」「プラグイン機能を持つアプリケーションを作成する」
http://dobon.net/

引用返信 編集キー/
■14242 / inTopicNo.4)  Re[2]: DLLの呼び出し方法について
□投稿者/ やじゅ (152回)-(2008/02/13(Wed) 18:58:12)
下記のような感じですかね

dllFile = Me.edModule_id.Text
formName = dllFile & ".frm" & dllFile

'読み込むアセンブリの変数定義
If Not IO.File.Exists(dllFile & ".dll") Then
    'ファイルが存在しない
    Return
End If
assemblyObject = System.Reflection.[Assembly].LoadFrom(dllFile & ".dll")

'読み込んだアセンブリからクラスの型を取得
myType = assemblyObject.GetType(formName)
If myType Is Nothing Then
    Return
End If

'クラスのインスタンスを作成
objectInstance = System.Activator.CreateInstance(myType)
'作成したインスタンスをフォームオブジェクトへ型変換
form = CType(objectInstance, Form)
form.Show()

引用返信 編集キー/
■14259 / inTopicNo.5)  Re[2]: DLLの呼び出し方法について
□投稿者/ myugaru (1回)-(2008/02/14(Thu) 08:47:26)
myugaru さんの Web サイト
こんにちわ!はじめまして。
まどかさんがおっしゃっているようなパターンでDLL呼び出しの動的サンプルをちょうど作っておりました。
ちなみに私の場合、相手DLLはネイティブのDLLになっています。
・・・というか実はSusieプラグインだったりしますが。
http://www4.atpages.jp/myugaru/
開発はC#ですがVB.NETにも簡単に変換できるツールがありますよね。

引用返信 編集キー/
■14279 / inTopicNo.6)  Re[3]: DLLの呼び出し方法について
□投稿者/ on0917 (3回)-(2008/02/14(Thu) 14:15:03)
No14259 (myugaru さん) に返信
> こんにちわ!はじめまして。
> まどかさんがおっしゃっているようなパターンでDLL呼び出しの動的サンプルをちょうど作っておりました。
> ちなみに私の場合、相手DLLはネイティブのDLLになっています。
> ・・・というか実はSusieプラグインだったりしますが。
> http://www4.atpages.jp/myugaru/
> 開発はC#ですがVB.NETにも簡単に変換できるツールがありますよね。
>

皆さんアドバイスありがとうございます。早速トライしてみます。
解決済み
引用返信 編集キー/
■14359 / inTopicNo.7)  Re[3]: DLLの呼び出し方法について
□投稿者/ 倉田 有大 (122回)-(2008/02/15(Fri) 21:33:33)
2008/02/15(Fri) 21:41:28 編集(投稿者)
2008/02/15(Fri) 21:41:03 編集(投稿者)

No14259 (myugaru さん) に返信
> こんにちわ!はじめまして。
> まどかさんがおっしゃっているようなパターンでDLL呼び出しの動的サンプルをちょうど作っておりました。
> ちなみに私の場合、相手DLLはネイティブのDLLになっています。
> ・・・というか実はSusieプラグインだったりしますが。
> http://www4.atpages.jp/myugaru/
> 開発はC#ですがVB.NETにも簡単に変換できるツールがありますよね。


おおお!これは!
HPに書かれていますが、私もC++でDLLかまして使っていましたよ。
まだ、ソースを見ていないのですが、画像ファイルだけじゃなくて、アーカイブファイルにも対応しているのかな?

その後↓

ソース、読ませてもらいましたが、00AMには対応してないのかな?
コンストラクタでspiフォルダのあるディレクトリー指定させてもらえたらうれしかったり^^まあ、自分で編集すればいいのですが
解決済み
引用返信 編集キー/
■14360 / inTopicNo.8)  Re[4]: DLLの呼び出し方法について
□投稿者/ myugaru (3回)-(2008/02/15(Fri) 23:16:43)
myugaru さんの Web サイト
No14359 (倉田 有大 さん) に返信
> ソース、読ませてもらいましたが、00AMには対応してないのかな?
> コンストラクタでspiフォルダのあるディレクトリー指定させてもらえたらうれしかったり^^まあ、自分で編集すればいいのですが

どうも使っていただき感想いただいてありがとうございます!
確かに00AMには対応してないです。それは作った趣旨があくまで「サンプル」であるためです。
それと。・・・・こちらについてはこのエントリーから逸脱してしまいますので、
もしご興味ございましたら私のブログの方などへ書いていただくと話も膨らませやすいかと思います。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -