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

質問
-
はじめまして。
お世話になります。
現在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フォームアプリケーション
文字セット:マルチバイト文字セットを使用
回答
-
# なぜフォームアプリケーションなのにUnicode文字セットを使っていないのであろうか?
外部プロセスを起動するのであれば、Process:
tartを使ってみては?
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 -
あくまで一例
#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);...
}
-
蒼の洞窟さま επιστημη さま
ご親切なアドバイスありがとうございます。
Process:
tartで問題解決いたしました。
String^ appPath = System::Environment::CurrentDirectory;
appPath = appPath + "\\aa\\bb.exe";Process:
tart( appPath );
ShellExecuteを使おうとして、型変換するなど余計な事をしていました。
今回は結局関係ありませんでしたが、型変換に関することなど未熟で知らないことも多く勉強させていただきました。
すべての返信
-
# なぜフォームアプリケーションなのにUnicode文字セットを使っていないのであろうか?
外部プロセスを起動するのであれば、Process:
tartを使ってみては?
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 -
あくまで一例
#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);...
}
-
蒼の洞窟さま επιστημη さま
ご親切なアドバイスありがとうございます。
Process:
tartで問題解決いたしました。
String^ appPath = System::Environment::CurrentDirectory;
appPath = appPath + "\\aa\\bb.exe";Process:
tart( appPath );
ShellExecuteを使おうとして、型変換するなど余計な事をしていました。
今回は結局関係ありませんでしたが、型変換に関することなど未熟で知らないことも多く勉強させていただきました。