none
/CLR オプションで作成した DLLの「混在アセンブリの初期化」の問題に関して RRS feed

  • 質問

  • Windows Server 2008 R2 Datacenter Service Pack 1 (64ビット オペレーティングシステム)上で
     Visual Studio 2010 Professional (Version 10.0.40219 SP1Rel)を使用しています。

     元々、VC++ で作成しているアプリケーションの機能追加を行っています。
     新機能で使うデータを C# のクラスで定義しようとしています。
     今までの資産(dll)は /clr オプションを使用して、C# のクラスを使えるようにしようと思っています。

     「https://msdn.microsoft.com/ja-jp/library/ms173266(v=vs.100).aspx」に掲載されている、いわゆる「混在アセンブリの初期化」の問題に関して。

    1. Visual Studio 2010 でもこれは発生し得る問題と考えていますが間違いありませんでしょうか。
    (試験中に似たような現象が起こりまして、そのときの状態を保存できなかったので確認できなくなっています)

    2. 同じ問題が発生するとして、どの程度の頻度で起こるものでしょうか。

    3. 同じ問題(特に R6033)をわざと発生させるようなソースコードをサンプルとして作成したいのですが。
     そのようなことができるでしょうか。
    2016年9月20日 0:53

回答

  • ローダー ロックは依然として発生することがありますが、現在では、再現性をもって発生し、検出されます。

    とありますから2.については「再現性をもって」つまり条件を満たした場合は100%発生します。従って1.については非確定的には発生しません。
    # と言いつつも「混在モード DLL の読み込みプロセスで、このような確定的でない場合の問題はほとんどなくなりました。(Almost all non-determinism has been removed from the mixed DLL loading process.)」という記述もあり悩ましいです。

    3.については確定的に発生させることはできるでしょう。既にドキュメントに記載されていますがDllMainからMSIL関数を呼び出すだけのことです。

    なお、「試験中に似たような現象が起こりまして」とのことですが、R6033が発生したのでしょうか? 「似たような」という記述が引っ掛かります。完全に一致しなければ単なる勘違いかと思います。

    • 回答の候補に設定 星 睦美 2016年10月20日 5:37
    • 回答としてマーク 星 睦美 2016年10月27日 7:27
    2016年9月21日 8:07