none
VBからC#<DLL>の起動について RRS feed

  • 質問

  • 開発環境(VB6、C#(VS2008))
    C#初心者です。


    掲題の件についてですが、
    VBの業務的なアプリケーションより、C#で作成のDLLを起動したいと思い、
    C#フォーラムを参考にして、なんとか問題なく起動出来る事が出来ました。

    その中で疑問になった事がありましたので、
    どなたかご存じの方はご教授下さい。

    ☆REGASMについて
    REGASM.exeにて、対象のC#DLLをレジストリへオプションなしで登録して
    問題なく起動できるのですが、オプションの【/codebase】を付ける必要が
    あるのかどうかです。
    この情報も確認しましたが、今一つ理解できませんでした。
    http://msdn.microsoft.com/ja-jp/library/tzat5yw6%28VS.80%29.aspx


    特に共通的な意味合いを持つDLLでもなく、単に業務アプリケーションのDLLと
    して使用したいだけなので、レジスト出来れば問題ないのでは?と単純に
    考えてしまいます。
    【/codebase】はどのような時に使用するものなのでしょうか?

    2009年9月18日 8:50

回答

  • こんにちは、フォーラムオペレーターの高橋春樹です。

    甕星さん、ご投稿ありがとうございます。

    okaharaさん、初めまして。
    MSDNフォーラムのご利用ありがとうございます。

    codebaseオプションの件ですが、GACにDLLを登録したくない場合で、
    そのDLLを、他のアプリケーションと共通で使用したい場合に/codebaseオプションを付けて
    DLLの場所を指定するのだと思います。
    GACに配置されたDLLの場合は、codebaseオプションを付ける必要はありません。

    もし認識が間違ってたらご指摘ください(^-^;)


    マイクロソフト株式会社 フォーラム オペレーター 高橋春樹
    • 回答としてマーク 菊地俊介 2009年11月19日 9:00
    2009年10月20日 8:17
  • コードベース付きで登録したものをコードベースなしで登録しなおす場合、
    一度/unregisterの操作を行ってから登録しなおす必要があるようです。

    regasm /codebase hoge.dll
    regasm /unregister
    regasm hoge.dll

    /unregisterの操作を抜かした場合、レジストリ中のCodeBaseというエントリーが残ったままになってしまい、
    GACを参照できません。

    この現象を誤解された可能性はありませんか?
    • 回答としてマーク 菊地俊介 2009年11月19日 8:59
    2009年11月2日 12:37

すべての返信

  • C#で作成したDLLが、さらに他のマネージドコードのDLLを使用している場合に使う場合があります。
    甕星
    • 回答の候補に設定 菊地俊介 2009年11月19日 9:00
    2009年9月19日 4:23
  • 甕星さん
    ありがとうございます。

    >C#で作成したDLLが、さらに他のマネージドコードのDLLを使用している場合に使う場合があります。

    ということは、C#で作成したDLLがその他のマネージコードのDLLを使用していなければ
    単純にオプションなしでレジストリ登録して使用出来るという解釈で大丈夫ということですね。
    参考になりました。
    2009年9月24日 1:36
  • こんにちは、フォーラムオペレーターの高橋春樹です。

    甕星さん、ご投稿ありがとうございます。

    okaharaさん、初めまして。
    MSDNフォーラムのご利用ありがとうございます。

    codebaseオプションの件ですが、GACにDLLを登録したくない場合で、
    そのDLLを、他のアプリケーションと共通で使用したい場合に/codebaseオプションを付けて
    DLLの場所を指定するのだと思います。
    GACに配置されたDLLの場合は、codebaseオプションを付ける必要はありません。

    もし認識が間違ってたらご指摘ください(^-^;)


    マイクロソフト株式会社 フォーラム オペレーター 高橋春樹
    • 回答としてマーク 菊地俊介 2009年11月19日 9:00
    2009年10月20日 8:17
  • To:フォーラム オペレーター 高橋春樹 様


    回答ありがとうございました。
    私の認識も高橋様が書かれている内容とほぼ一致しております。
    >codebaseオプションの件ですが、GACにDLLを登録したくない場合で、
    >そのDLLを、他のアプリケーションと共通で使用したい場合に/codebaseオプションを付けて
    >DLLの場所を指定するのだと思います。


    今回、疑問となったのが、そのC#作成DLLが【/codebase】オプションなしで
    REGASM.exeにて登録後、VBから呼べた事が疑問の始まりでした。
    オプションの【/codebase】なしでVB側から呼べた事により
    これを指定する意味は何なのだろうと?
    指定がなくても動作するじゃないかと・・・

    その疑問が解決しませんでしたので、このフォーラムを
    利用させていただきました。
    今回の作成DLL(C#)はGACに登録する内容のものではなく、
    ((登録したくないケース)という意味ですが)
    単純にVB側APPから利用するという考えでした。

    意味合い的には、パス指定で【/codebase】オプションを
    つけるという内容には納得はしておりますので、
    今回のケースはREGASM.exeにてDLLを登録する際に
    パス指定プラス【/codebase】をつけようと思っております。


    高橋様、回答ありがとうございました。
    2009年11月2日 8:46
  • コードベース付きで登録したものをコードベースなしで登録しなおす場合、
    一度/unregisterの操作を行ってから登録しなおす必要があるようです。

    regasm /codebase hoge.dll
    regasm /unregister
    regasm hoge.dll

    /unregisterの操作を抜かした場合、レジストリ中のCodeBaseというエントリーが残ったままになってしまい、
    GACを参照できません。

    この現象を誤解された可能性はありませんか?
    • 回答としてマーク 菊地俊介 2009年11月19日 8:59
    2009年11月2日 12:37
  • ぱらぐあい 様


    回答ありがとうございます。
    手順をもう一度見直し再確認したところ、
    現象が確認出来ました。
    当方が誤解していたようです。
    回答を下さった方々、申し訳ありませんでした。

    今回、誤解を生じた現象ですが、
    vbプロジェクトを起動しデバッグ(呼出はC#作成dll)
    ①regasm c:\test\hoge.dll /codebase  →vbで動作確認
    ②regasm hoge.dll /u                        →</unregister>
    ③regasm c:\test\hoge.dll                  →再度</codebase>なしで登録し動作確認

    この手順で行うと、hoge.dllがメモリ上死んでいない!?様子。
    dllが呼出可能なように見えただけでした。
    vbプロジェクトを再度、開きなおし実行すると③のregasmが有効となって
    おらずhoge.dllは呼出できませんでした。

    ですので、</unregister>は行っていたのですが、確認手順の誤りから
    自分で現象を誤解していたようです。
    大変、すいませんでした。

    皆様のおかげで、</codebase>の意味も私自身、深く理解出来ましたので
    助かりました。
    どうも、ありがとうございました。
    2009年11月4日 5:39
  • 皆様、こんにちは。

    甕星さん、ぱらぐあいさん、回答ありがとうございます。

    okaharaさん、フォーラムのご利用ありがとうございます。
    勝手ながら、有用な情報と思われる回答へ回答マークをつけさせていただきました。

    今後ともフォーラムをよろしくお願いします。
    それでは!
    2009年11月19日 9:03