none
コマンドラインから作成したEXEとVisual StudioからビルドしたEXEの違い RRS feed

  • 質問

  • みなさん、こんにちは。やまも2といいます。

    Visual Studio 2005 Standard EditionをWindows XP SP2にインストールして使用しています。

    J#で作成したメソッドをC++で利用したいと思いコマンドプロンプトから

    > vjc /t:library testJL.java

    として、testJL.dllを作成しました。次に、C++のTestCPPというプロジェクトをCLRコンソールアプリケーションを選択して新規作成し、TestCPP\TestCPP内に先ほど作ったtestJL.dllを置いてコンパイルオプションに/FU testJL.dllを加えてビルドしたところコンパイルは問題なくできました。ただ、できたEXEを実行しようとすると

    ハンドルされていない例外:System.IO.FileNotFoundException: ファイルまたはアセンブリ 'testJL, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'、またはその依存関係の1つが読み込めませんでした。指定されたファイルが見つかりません。ファイル名 'testJL, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' です。

    場所 main()

    というエラーが表示されてうまく動作しません。

    ただ、testJL.dllとTestCPP.cppを同一のフォルダにおいてコマンドラインから

    >cl /clr /FU testJL.dll TestCPP.cpp

    とするとエラーなしにコンパイルでき、EXEも問題なく実行できます。なぜ、Visual Studioの方から作成したEXEは実行できないのでしょうか?

    ---testJL.java---

    class testJL{
     int outputInteger(int i){
      return i;
     }
    }

    ----------

    ---TestCPP.cpp---

    #include "stdafx.h"
    #include "stdio.h"

    using namespace System;

    int main(){
     testJL^ p=gcnew testJL();
     int result=p->outputInteger(3);
     printf("integer: %d\n",result);
     return 0;
    }

    ------------

    2006年8月9日 14:42

すべての返信

  • Debug なら bin\Debug に実行ファイルが生成されていますよね。

    testJL.dll をコピーすればいいですよ。

    2006年8月9日 15:55
  • おがわみつぎさんレス、ありがとうございます。

    DLLをDebugフォルダにコピーして実行してみたところ見事に動きました!!EXEと同一のフォルダに置かないといけないというのは盲点でした。ありがとうございました。

    2006年8月10日 0:11
  • すでに話は収束していますが、
    使用しているDLLのロードを行う為にどのような順番でファイルを探しているかを
    理解しているとなぜそうなるのかわかると思います。
    一度、その部分について調べてみる事をお勧めします。

     

     

    2006年8月18日 1:48