質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

Q&A

1回答

2536閲覧

一定時間ごとのDllファイルの読み込み

tasku

総合スコア8

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

0グッド

0クリップ

投稿2016/08/08 03:06

初投稿です。プログラミング経験一年で独学してます。

###前提・実現したいこと

プログラミング言語:C#
プラットフォーム:.NET Framework
開発環境:Visual Studio

10秒ごとにソリューション外部のDLLを読んで、その結果をコンソール上に表示した
いです。
呼び出す外部DLLのファイル名は「SampleDll.dll」です。

下記のような手順です。
(1)返り値Trueとする関数Testを持つSampleDLL.dllを作成する
(2)TimerSampleクラス起動
(3)SampleDLL.dllの関数Testの返り値を表示する ※True
(4)返り値Falseとする関数Testを持つSampleDLL.dllと、前述のDllファイルを入れ替
える(Pathは同じ)
(5)10秒後、SampleDLL.dllの関数Testの返り値を表示する ※False

つまり、TimerSampleクラスが読み込むDllファイルを、ファイル名だけ同じにして、
実際の中身を変えたいです。

実現するために、

質問1:上記手順は実現できますか?(実行時リンクというものでしょうか?)

質問2:Dllファイルを読み込むための設定には、VisualStudio上の「参照設定」に
登録が必要ですか?

質問3:Dllファイルを読み込むためのメソッドは何を使えばよいですか?
※ネットを見ると、Importや、Assembly.loadなどがあるようですが、いまいち分か
りません

###該当のソースコード

using System;
using System.Timers;
using System.Runtime.InteropServices;

namespace TimerSample
{
class TimerClass
{
static void Main()
{
TimerClass timerClassInstance = new TimerClass();
timerClassInstance.Run();
}

public void Run() { Timer timer = new Timer(); timer.Elapsed += new ElapsedEventHandler(TimerRunning); timer.Interval = 10000; timer.AutoReset = true; timer.Start(); Console.ReadLine(); // キーが押されるまで実行 } public void TimerRunning(object sender, ElapsedEventArgs e) { Console.WriteLine(DateTime.Now); bool result = false;//ここに外部DLL呼び出し結果を入れる //TODO:10秒ごとに、外部DLLを呼び出し直して、値を知りたい //result = SampleDLL.Test(); のような呼び出し方?? Console.WriteLine("RESULT:{0}", result); //DLLが返す値が変わりう


}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

AppDomainのシャドーコピーという方法で、出来そうな気がします。
http://d.hatena.ne.jp/akiramei/20071111/1194786373

ただ、共通のインターフェースを持つDLLが別途必要なので、少し大変だと思います。

端的に説明すると、
AppDomain.CreateDomain で新しいAppDomainを作って、
CreateInstanceAndUnwrap でアセンブリを読み込む感じです。

普段はデフォルトのAppDomainが使われるので、意識することはないと思いますが、
DLL毎にプロセスを分けたい場合や、DLLの再ロードを行いたい場合に使えます。

投稿2016/08/08 04:25

m.h

総合スコア149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問