• 締切済み

DLLのプロパティ値の非共有

VBで作成したDLLのプロパティ共有 すみません。DLL作成初心者です。 VBでDLLを作成してみたんですが、Original.Exeから呼び出した Called_A.DLLをそのままに、Called_B.DLLをOriginal.Exeから呼び出しました。 そこで、Called_B.DLLからもCalled_A.DLLを呼び出す事が出来るのですが、 Called_B.DLLから呼び出したCalled_A.DLLのプロパティを変更したところ、 Original.Exeから呼び出したCalled_A.DLLのプロパティの値も変更されているんです。 DLLってのは、インスタンスをあっちこっちで作ることができ、各々で作ったインスタンス内で 閉じられているもんだと思っていました。 作り方で共有する事が出来たり、各々で閉じたりそうなっちゃうんですか? ダイナミックリンクライブラリっていう位だから、各々で閉じる事は出来ないんですかね? メモリを共有するのとかしないとかが絡んでいるのかなと思いましたが、ヘルプをみても よく分からないし、その手のDLLについて書いてあるサイトを見てみたんですが、 いまいちよく分からず的を得ているのか得てないのかすら分かりません。 すみませんが、どなたかご教授お願いします。 相関図) 1-1: Original.Exe → 1-2: Called_A.DLL ↓ 2-1: Called_B.DLL → 2-2: Called_A.DLL ※何故か2-2で設定したプロパティが1-2のプロパティにも反映されている... 環境: WindowsXP Professional VisualBasic6(SP5) InternetExplolor6

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

DLLの中の関数の定義を標準モジュールで行っていませんか? 標準モジュールはStaticなインスタンスなので、共有され、 リフレッシュもできません。 Privateなクラスモジュール内で定義してみては如何でしょう。 おそらく、クラスのインスタンスと同じ扱いになると思います。 ダメかも知れませんが…

lampflash
質問者

お礼

nda23さん、回答どうもありがとうございます。 遅くなりましてすみません。 私の知識不足の為、Privateなクラスモジュールでの定義がよく分からず、外部へ繋がっているクラス内でPrivateな変数宣言すると、その他の標準モジュール等で、その値を参照出来なくなってしまいます。 いろいろ調べたり、試しているのですが、未だうまくいきません。 もう少し調べてみます。

関連するQ&A

  • VC++で作成したDLLについて

    すみません、 VC++6.0で作成したDLLについて教えていただきたいのですが。 TEST_A.DLLというDLLと、TEST_B.DLLというDLLファイルを作成したとして これをC:\TEST\DLL\に格納してるとします。 このとき、TEST_B.DLLからはTEST_A.DLLの関数を呼び出しています。 次に、TEST_B.DLLの関数を使用しているTEST.EXEという実行ファイルを VB6.0で作成します。 このファイルをC:\TEST\EXE\に格納します。 そして、TEST.EXEを実行すると、 「TEST_B.EDLLが見付かりません」と言って怒られてしまいます。 VBでは、TEST_B.DLLをフルパスで指定しております。 しかし、TEST_A.DLLをEXEと同じ場所に置いてあげると 正常に動きます。 これは、TEST_B.DLLからTEST_A.DLLが見えていないということなのでしょうか? TEST_B.DLLの設定がおかしいのでしょうか? それとも、TEST.EXEでもTEST_A.DLLをフルパス指定してあげないといけないのでしょうか? ちなみに今回、プロジェクトマネージャーから「環境変数(PATH)の設定はしたくない」と言われていますので、PATHの指定はしてません。 すみませんが、どなたか教えていただけますでしょうか?

  • DLLインポートについて

    A.exe ⇒ B.dllの関数 ⇒ C.dllの関数 の順で関数をコールするのですが、C.dllの関数をコールする際に DllNotFoundExceptionが出てしまいます(「'C.dll' を読み込めませんでした。」) また、上記エラーはPCによって発生しない場合もあるのですが、 原因として何が考えられるでしょうか。 動作確認したPCのフォルダ構成は同じで下記のようになっており、 EXEとDLLはすべて同じフォルダ内に存在しているため原因がよくわかりません。 BIN ├A.exe VB.net ├B.dll VB.net └C.dll C言語

  • プロパティのバージョン情報書き換えについて

    VBで作成したexeやdllファイルのプロパティで見れるバージョン情報内の「コメント」や「ファイルバージョン」等は作成時のソースファイルなしでも書き換えることができるのでしょうか?

  • *.exeと異なるフォルダのDLLをみにいく様に設定するには?

    環境 Windows VISTA SP1 Visual Studio 2008 今現在、ビルドすると、releaseというフォルダにA.exeが 作成されます。そして、同一のプロジェクトにDLL生成プロジェクトを 追加してあり、同じreleaseというフォルダに B.dllが生成される様に設定してあります。 この状態で、A.exeをたたけば、B.dllを認識して立ち上がってくれます。 しかし、最近、dllを作るプロジェクトが大量になってしまい、 releaseフォルダが結構たくさんになってしまっています そこでA.exeをたたいたら release/dll というフォルダをみにいって起動してくれる様に改良 したいのですが どうしたらよいでしょうか? *exeを追記しているslnのプロパティを一通りみたのですが よくわかりません。

  • DLL内のイベントをハンドリング

    VB2008にて、外部DLL(VB2008作成)を使用しようと考えています。 外部DLLの仕様書には、メソッド、イベント、プロパティが記載されており、 外部DLLの発生させるイベントをハンドリングしたいのですがうまくいきません。 「参照の追加」にてDLLを指定し、ソース内で該当DLLのクラスもインスタンス化し、 DLL内のメソッドは使用できています。 イベントに関して仕様書には Event001(Byval arg1,Byval arg2)、Event002(Byval arg1,Byval arg2)、Event003… このように記載されています。 該当DLLのインスタンス化したものをTestClassとして、 Public Event TestEvent Handles TestClass.Event001 という記載では駄目でした。 外部DLLのイベントのハンドリングについて、ご教授頂けましたら幸いです。

  • mfc42.dllファイルってなんですか?

    こんにちは。 最近、プログラムの勉強をしている物ですが、例えばVBであるシステムを開発して、SetUpを作った際に、色々なプラットフォームで検証するのですが、mfc42.dllというファイルが絡んだエラーが良く出ます。 そもそも「mfc42.dll」とは何でしょうか? OSインストール時に最初から入っているものなのでしょうか? dllファイルとはダイナミックリンクライブラリの事で、OSが色んな時に使用する共通の関数が詰まっている、VBでいう標準モジュールのようなものの事ですよね?(合ってますか(^^;)?) mfc42.dllがそうなら、どういうときに使用されるのでしょうか? また、Aというソフトをインストールした後で、Bというソフトをインストールして、互いのmfc42.dllの更新日時(バージョン?)が違う場合、Bをインストールする事によってAが動かなくなる・・・というのもありえるのでしょうか?? だとしたらとても怖い事ですよね!? でもSetUp作成ソフトやVB標準のディストリビュージョンでSetUp.exeをつくると勝手にmfc42.dllが紐付かれてしまう場合が多々あります。 これを回避する方法はあるのでしょうか? どなたかご教授下さい。

  • 共有DLLの参照方法

    共有DLLのインストールパスが変わる(Windowsがインストールされたパーティションのマッピングの違い,X86とX64の違い,ユーザーがカスタムインストールしているなど) EXEとの相対パスが変わる(ZIPで圧縮されている場合の回答位置など) DLLの種類やその中に含まれるクラスなどの定義は変わらない レジストリなどを介してファイルパスはわかる という事になるわけですがこういった場合の参照はどのように追加すればよいのでしょうか? どぼん氏のプラグイン機能を持つアプリケーションを作成するのような実装では インターフェースをEXEか別のDLLでインターフェースをクラス分全て持たなければならない インターフェースを持つDLLと共有DLL、インターフェースを持つDLLとEXEの双方の相対パスが変えられない またはインターフェースを持つDLLの絶対パスが変えられない といった問題が回避できませんでした。 環境はWindows Vista x64+Visual Studio 2005です。

  • OLESelfRegisterプロパティの取得

    タイトルのとおりです。 レジストリ登録が可能かどうか判断するために exeファイルや dllファイルのプロパティで OLESelfRegisterという項目が あるかどうかのチェックを行いたいのですが、 VisualBasic(5.0or6.0)で 取得できるのでしょうか? APIでも何でもいいので、 教えてもらえませんか?

  • 異なるexeから参照しているdllの変数は実行時のメモリ領域として独立的か?

    結論から質問内容を言うと、 異なるexeから参照しているdllの変数は実行時のメモリ領域として独立的か? 具体的には、 A.exeと、B.exeの両方で参照している Common.dllに定義しているクラスの staticなフィールドは、A.exe実行時のメモリ領域と、 B.exe実行時のメモリ領域と、完全に別で独立状態 であることを前提にしているのですが。。。 これは本当に真なのかを確認させてください。 あたりまえじゃねーかバカ野郎っていわれそうですが ちょっと、そこ間違えると後で、痛いので、 念押しで再確認お願いします。 <質問に至った経緯> Delphi3.0からVB.NET2003(2005未対応のコンポーネントを使用する諸事情があったから) にシステム移行の案件があり、 工数を避けません。現在、開発方針を検討中で調査していると、デルファイプロジェクトAと、 デルファイプロジェクトBで、Commonという名前の フォルダにあるソースを共有していて、 A.exeとB.exeを作っていました。 特に共通部分をdllにしていたりしていませんが。 VB.NETでそれは、きついので、 Commonにあるソースだけ、集めたCommon.dllを作る プロジェクトを作り、Aプロジェクト、BプロジェクトがCommon.dllを参照するやり方を検討しました。 Common.dllには、たくさんグローバルな変数が定義されていたので、 グローバルなデータは、もともとのソースファイルごとにクラスを 作ってそこにスタティックなフィールドとして宣言していく。それをAや、Bのプロジェクトのソースで 使うが、もともと、デルファイがexeが完全にわかれていたので、VBでdllに分けた結果、実行時にメモリも 共有されると、意図した動きをしてくれない懸念が あるので、それはないのかどうかを確認したかった。 ########################################### 以上です。

  • 16ビットDLLから32ビットDLLをコールする方法

    現在VC++で「16ビットDLLから32ビットDLLをコール」をしようと思って 調べていましたが、このご質問に頼るしか方法がなく、困っています。 状況  VB4.0(16bit)・・・16bit版でEXEを作成  VC++1.51・・・・・16bitDLLを作成  VC++4.0/6.0・・・・32bitDLLを作成  VB4.0(16bit)のEXEから、16bit版のDLLをコールし処理を行いたいの  ですが、16bit版DLLで扱えないVC++の関数(プロセス関数:spawn??())  を利用しなければならず、16bit版DLLの機能を32bit版DLLで作成し、  16bit版DLLから32bit版DLLを呼び出そうと思っております。 誰か助けて! 是非、皆様のお知恵を拝借致したく思います。