none
C#でC++/CLIで作成したアセンブリを参照するときに、/clrオプションだとうまくいかない。 RRS feed

  • 質問

  • C++/CLIで作成したexeファイルをdll代わりに参照して駆動するC#プログラムを作成しているのですが、

    コンパイルオプションが/clrだと実行時にアセンブリのクラスをgcnewした瞬間にエラーになります。

    たまたまアンマネージドなコードが含まれていなかったので、/clr:pureにしたところ問題なく実行できました。

    /clrオプションを使ってアンマネージドなコードを実行するクラスをC#側から利用することはできないんでしょうか?

    2007年2月23日 20:24

回答

すべての返信

  • exeファイルの参照はできません。

    仕様かどうかは微妙ですが。

    2007年2月24日 14:35
  • /clrオプションだとexeの参照はできないって意味でしょうか?
    2007年2月25日 1:54
  •  Kilio さんからの引用
    /clrオプションだとexeの参照はできないって意味でしょうか?

    とりあえずそう考えておけばよいでしょう.

    ネイティブのC++アプリケーションは,C++ のランタイムライブラリに依存していますが,このランタイムライブラリの初期化方式は実行ファイルが exe と dll の場合で異なります.
    /clr で混合モードアセンブリを作成した場合でも,ネイティブコード用の C++ のランタイムライブラリの初期化は必要なのですが,exe 形式のアセンブリを dll 的に読み込んでしまうと恐らく初期化がきちんと行われません.

    純粋な MSIL のみからなる .NET アセンブリはこういった制限を受けないという意味で,従来の問題点を解決しているとも言えます.

    2007年2月25日 7:09
  • ありがとうございます。

    非常に参考になりました。

    2007年2月26日 7:53