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

このQ&Aのポイント
  • 異なるexeから参照しているdllの変数は実行時のメモリ領域として独立的か?これは本当に真なのかを確認させてください。
  • Delphi3.0からVB.NET2003にシステム移行する際、異なるexeから参照しているdllの変数は実行時のメモリ領域として独立的か確認する必要があります。
  • A.exeとB.exeで参照しているCommon.dllの変数は実行時のメモリ領域として独立的であるかどうかを確認することが重要です。
回答を見る
  • ベストアンサー

異なる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に分けた結果、実行時にメモリも 共有されると、意図した動きをしてくれない懸念が あるので、それはないのかどうかを確認したかった。 ########################################### 以上です。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

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

bean_atkinson
質問者

お礼

すばやい回答を頂いたのに、返事がおくれました。 すぐに回答を頂いたので、安心して、仕事できました。 ありがとうございます。

関連するQ&A

  • DLLで同じメモリ領域を参照するには?

    現在、DLLを作成しています。 ある実行ファイル(exe)から呼び出された時に、 DLLでメモリを確保し、データを保持します。 また、別の実行ファイル(exe)から呼び出された時に、 最初に保持したデータの内容を返したいのですが、 どこにどういう定義でメモリを確保すれば 同じ領域が参照できますか? 現時点の状態では、別タスクであるため、最初に確保した メモリのアドレスすら持って来れません。 申し訳ありませんが、教えてください。 よろしくお願いいたします。

  • VB6.0exeから.NETのDLLを呼び出した場合の実行時エラー’429’について

    お世話になります。 環境はWindowsXPです。 現在、VB6.0のexeから.NETのDLLを使用する・・・というのをしています。 以下の手順を踏み、実行してみたのですがどうも上手く行きません。。。 (1).NETのDLLを作成 (2)COMとして利用するために、.NET 2003コマンドプロンプトから「regasm」コマンドにてレジストリに登録 (3)tlbexpコマンドで、タイプライブラリを作成 (4)VB6のプロジェクトから(3)を参照設定する (5)VB6から.NETクラスを生成し、呼び出す (6)プロジェクトをコンパイルし、exeを生成 この手順にて実行すると「実行時エラー'429'ACtiveXコンポーネントはオブジェクトを作成できません」という エラーメッセージが出てしまいます。 windows updateをしてみたり、VB6.0のランタイムをインストールしてみたりしたのですが、 どうもダメみたいで困っています。 解決方法などご存知の方がいらっしゃいましたら、 ご教授いただけると大変助かります。 よろしくお願いいたします。

  • exeファイルはどのdllを参照すべきか、知っているのでしょうか。

    dllとは、プログラムが実行時に参照するものですよね。 よく使われる機能があらかじめ作られているものですよね。 私はC言語しか知らないので、C言語でプログラミングすることで話を進めさせてください。 (とは言っても、ごく初歩的なプログラムが組めるだけの素人です。) OSはWindowsということにします。 C言語は、関数の集まりでソースが書かれています。 dllも、中身に関数の実体が記述されている、そういうイメージでしょうか。 私がもっと勉強して、複雑なプログラムを組んだりすると、 「あ、これはdllに実体がある機能だから、いちいち実装を書かなくてもいいんだな」 と考えて、ソースファイル( ~.c )の中でその関数を使うだろうと思います。 私がよくわからないのはここからです。 dllにある関数をソースで使って、無事コンパイルして、さあリンクしてexeを作りましょう、 というときに、リンカ(リンクを行うプログラム)は、 「そんな関数、実体がないぞ」 って文句を言ってこないのでしょうか。 いや、リンカは、dllに実体がある関数だということを知っているはず。 でもそれって、いちいち 「この関数はどこどこにある ○○.dll というdllに書いてあります」 というふうに、リンカに教えてあげなくてはいけないのでしょうか。 (それってまさか、ソースに書くわけじゃないですよね? ) それから、 exeファイルっていうのは「この機能はdllに行わせる機能だ」ということを知っているのでしょうか。 dllに行わせる機能だということを知っているとしても、 どのディレクトリにある なんと言う名のdllに その機能が書かれていることまで知っているのでしょうか。 (でもそこまで知っていたら逆に、ディレクトリ構成の違うマシンでは実行できなくなってしまうし。) そういうような原理的なことを教えてください。

  • 参照するDLLを格納したフォルダをVSS管理したい。

    参照するDLLを格納したフォルダをVSS管理したい。 ソリューションに、プロジェクトA、プロジェクトBがあり、それぞれフォルダ1の中にある DLLを参照しています。 これをソリューションごとソース管理に追加したいのですが、他のメンバがVSSから 落とした場合、コンパイルが通らなくなるので、参照しているフォルダごとVSSに あげたいのですが…。 ソリューションにフォルダは追加できないようなので、VisualStudioからプロジェクトA、 プロジェクトBにそれぞれフォルダを作り、その中にそれぞれDLLを追加するしかないので しょうか? しかし、DLLのバージョンがあがった場合、大変手間です。 すべてのプロジェクトが同じDLLを参照し、かつ、そのDLLもソリューションに追加し、 ソース管理したときに一緒にVSSにアップロードされるようにはできないのでしょうか? ※VisualStudioは2005です。

  • exeではなくdllを出力したい。

    VB2005環境です。 あるソリューション(仮にA)に、プロジェクトが2つ (C、Dとします)入っています。 どちらも新規追加しただけの状態で、空のフォームが あるだけです。 この状態でビルドをすると、Aフォルダの中にB、Cフォルダ、 それぞれB.exeと、C.exeが出力されています。 最終的には、このB、Cのプロジェクトは、別のソリューション(Z) に追加したいと考えています。 ソリューションZにあるプロジェクトにはメニュー用のフォームが あり、ボタンを押すと、C、Dのフォームがそれぞれ立ち上がる ようにしたいのです。 既にソリューションZにはプロジェクトがいくつか追加されていて、 ビルドをかけると、それらは○○.dllの形で出力されます。 C、Dも.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のプロパティを一通りみたのですが よくわかりません。

  • メニューEXEよりdllを呼び出す方法

    Vb.Netで、メニューEXEより、プログラムdllを呼び出す場合なのですが、VB6.0ですと、CreateObjectを使用して呼び出すことが可能だと思いますが、.NETにて同じ事を行おうと考えた場合、どのように作ればよいのでしょうか? 私が調べた感じでは、メニューEXEの参照設定にプログラムdllを追加させる方法です。 上記方法ですと、プログラムdllが増えるたびにEXEに項目を追加しないとまずく、非効率だと思うのですが…

  • VB4.EXE で 実行時エラー '31037'

    WIN2000 で VB4.EXE を 動かそうとすると 実行時エラー '31037' ファイルの読み込み中にエラーが発生しました。 とエラーが出ます。 どうやらグリッド部分の読み込みで エラーが出てるみたいです。 VB6.EXE を 設定した人間が 環境を変えたらしく 今までのように最低限のDLL,OCXで 動かなくなりました。 VB4.EXE と VB6.EXE を 共存させるには どうすればいいでしょうか?

  • VBにてexeを実行させる方法

    環境OS:2000 開発ツール:VB,ACCESS,TDBGrid を用いてDBシステムを作成したのですが ・VB や その他のツールをインストールした端末にて  exe を実行できるのですが ・ツールを全くインストールしていない端末では一部  しか動作しません 開発時、[プロジェクト]-[参照設定]or[コンポーネント] の設定は変更いたしました 予想では dll,ocx ファイルが無いのが原因かなと 思っています この場合,どのようなファイルをどこに入れると、 ツールのインストールしていない端末でも動作するのでしょうか? 教えて下さい

  • VB.NETでDLLを読み込ませる時にエラーがでる

    VB.NET DLLがついているプログラムで、他のパソコンで動作確認済みの物を頂いたのですが、動きません。 ■現象 (1)VisualStudio .Netでソースを開きます。 (2)ソリューションエクスプローラの参照設定から****.dllを削除します。 (3)メニューのプロジェクトで参照の追加を選択します。 (4)参照の追加画面でCOMタブを選択します。 (5)参照ボタンをクリックし、System32フォルダ内より****.dllを 選択します。 (6)「選択されたコンポーネント」のリストにに****.dllが存在することを 確認 (7)OKボタンをクリックします。←ここでエラーがでます ■エラー 『'C:\WINDOWS\system32\xxxxxx.dllへの参照を追加できませんでした。タイプライブラリを読み込めませんでした。タイプライブラリ/DLLの読み込みエラーです。』 どなたか教えてください><めちゃくちゃ困ってます

専門家に質問してみよう