none
C++ .NETでの外部アプリケーションの起動がうまくいきません。(型変換の問題?) RRS feed

  • 質問

  • はじめまして。
    お世話になります。
    現在Visual Studio 2005 C++ .NETで開発を行っております。
    以下のソースで、プログラムの下位ディレクトリに存在するアプリケーションの起動を行いたいのですが、コンパイルはできるのですがアプリケーションが正常に起動しません。
    execPathとしてあるところに直接アプリケーションのパスを記述すれば起動するので、その前の型変換の問題なのではと思っていますが、どのようにすればよいのでしょうか?
    以上アドバイスよろしくお願いいたします。

                String^ appPath = System::Environment::CurrentDirectory;
                appPath = appPath + "\\aa\\bb.exe";
                char execPath[128];
                printf_s(execPath,"%S",appPath);
                nResult = ShellExecute(NULL, "open", execPath, NULL, NULL, SW_SHOW);


    ※開発環境
    WinXP Pro /
    Visual Studio 2005 C++ .NET/Windowsフォームアプリケーション
    文字セット:マルチバイト文字セットを使用

    2008年1月14日 12:45

回答

  • # なぜフォームアプリケーションなのにUnicode文字セットを使っていないのであろうか?

     

    外部プロセスを起動するのであれば、Process:Tongue Tiedtartを使ってみては?
    http://msdn2.microsoft.com/ja-jp/library/53ezey2s(VS.80).aspx

    ちなみに String^ → char型文字列 の変換の
    >printf_s(execPath,"%S",appPath);

    の方法は本当に正しいのでしょうかね?

    printfのマニュアルには書かれていないので、使わないほうが良いと思いっていますが。

    参考
    http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=818937&SiteID=7

    2008年1月14日 12:58
  •  

    あくまで一例

    #include <windows.h>
    #include <string>


    int main() {
      System::String^ appPath = System::Environment::CurrentDirectory;
      appPath = appPath + "\\aa\\bb.exe";
      array<wchar_t>^ execPath = appPath->ToCharArray();
      pin_ptr<wchar_t> pin(&execPath[0]);
      std::wstring path(pin, pin + execPath->Length);
      HINSTANCE nResult = ShellExecuteW(NULL, L"open", path.c_str(), NULL, NULL, SW_SHOW);

      ...

    }

     

    2008年1月14日 13:01
  • 蒼の洞窟さま επιστημη さま

     

    ご親切なアドバイスありがとうございます。

    Process:Tongue Tiedtartで問題解決いたしました。

     

    String^ appPath = System::Environment::CurrentDirectory;
    appPath = appPath + "
    \\aa\\bb.exe";

    Process:Tongue Tiedtart( appPath );

     

    ShellExecuteを使おうとして、型変換するなど余計な事をしていました。

    今回は結局関係ありませんでしたが、型変換に関することなど未熟で知らないことも多く勉強させていただきました。

     

    2008年1月15日 8:51

すべての返信

  • # なぜフォームアプリケーションなのにUnicode文字セットを使っていないのであろうか?

     

    外部プロセスを起動するのであれば、Process:Tongue Tiedtartを使ってみては?
    http://msdn2.microsoft.com/ja-jp/library/53ezey2s(VS.80).aspx

    ちなみに String^ → char型文字列 の変換の
    >printf_s(execPath,"%S",appPath);

    の方法は本当に正しいのでしょうかね?

    printfのマニュアルには書かれていないので、使わないほうが良いと思いっていますが。

    参考
    http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=818937&SiteID=7

    2008年1月14日 12:58
  •  

    あくまで一例

    #include <windows.h>
    #include <string>


    int main() {
      System::String^ appPath = System::Environment::CurrentDirectory;
      appPath = appPath + "\\aa\\bb.exe";
      array<wchar_t>^ execPath = appPath->ToCharArray();
      pin_ptr<wchar_t> pin(&execPath[0]);
      std::wstring path(pin, pin + execPath->Length);
      HINSTANCE nResult = ShellExecuteW(NULL, L"open", path.c_str(), NULL, NULL, SW_SHOW);

      ...

    }

     

    2008年1月14日 13:01
  • 蒼の洞窟さま επιστημη さま

     

    ご親切なアドバイスありがとうございます。

    Process:Tongue Tiedtartで問題解決いたしました。

     

    String^ appPath = System::Environment::CurrentDirectory;
    appPath = appPath + "
    \\aa\\bb.exe";

    Process:Tongue Tiedtart( appPath );

     

    ShellExecuteを使おうとして、型変換するなど余計な事をしていました。

    今回は結局関係ありませんでしたが、型変換に関することなど未熟で知らないことも多く勉強させていただきました。

     

    2008年1月15日 8:51