質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

595閲覧

外部Exe側にGUIDを渡したい

JanTh1989

総合スコア87

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/08/22 10:20

編集2019/09/03 06:00

実施したいこと

コマンドラインでアプリにGUIDを渡して起動したい。

質問

起動パラメータとしてGUIDクラスを据えたExeを、呼び出し元でGUIDクラスを使ってコマンドラインを生成し、呼び出すことはできるのでしょうか。

試したこと

C++

1GUID guid = { 2 0x11223344, 0x5566, 0x7788, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x11 3}; 4wchar_t comandLine[500] = {}; 5swprintf_s(comandLine, L"\"%s\" \"%s\"", Exeパス, guid); 6STARTUPINFO si = {}; 7ZeroMemory(&si, sizeof(si)); 8si.cb = sizeof(si); 9PROCESS_INFORMATION pi = {}; 10CreateProcessW( NULL, comandLine, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi)

上記だと、swprintf_s関数で変換エラーがでます。
%sに限らず、基本的なフォーマット指定子(%d,%fなど)では一律同様のエラーとなってしまいます。

妥協点として考えている方法

呼び出し先のアプリの起動パラメータをGUID文字列変更。
呼び出し元(試したことに記載のコード)にGUIDの文字列変換を追加して、コマンドラインに反映。

C++

1GUID guid = { 2 0x11223344, 0x5566, 0x7788, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x11 3}; 4std::wstring oGuidString; 5RPC_WSTR waString; 6::UuidToString( pGuid, &waString ) 7wchar_t comandLine[500] = {}; 8swprintf_s(comandLine, L"\"%s\" \"%s\"", Exeパス, guid); 9STARTUPINFO si = {}; 10ZeroMemory(&si, sizeof(si)); 11si.cb = sizeof(si); 12PROCESS_INFORMATION pi = {}; 13CreateProcessW( NULL, comandLine, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/08/22 10:26

guid が文字列でないので %s が使えないだけでは?
JanTh1989

2019/09/03 05:59

%sのみに絞った書き方になってしまい、紛らわしい質問となり申し訳ありません。 基本的なフォーマット指定子をそのまま使うとダメだった、という内容になります。 質問内容を調整します。
guest

回答2

0

環境はWindowsですよね(コードから推測)。
GUIDを文字列に変換するAPIでUuidToStringというのがあります。MSDNのUudiToStringのリファレンス
これを使って文字列変換してから起動パラメータにしてはどうでしょうか。

投稿2019/08/22 12:26

KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JanTh1989

2019/09/03 05:56

ご回答ありがとうございます。 やはりUuidToStringによる文字列が妥当そうですかね・・・。 GUIDのままでの実現性をもう少し考えてみます。
guest

0

ベストアンサー

UuidToString関数を使いたくないのであればこんな感じでしょうか。

C++

1 GUID guid = { 2 0x11223344, 0x5566, 0x7788, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x11 3 }; 4 wchar_t guidString[39]; 5 swprintf_s(guidString, L"%08x-%04x-%04x-%04x-%02x%02x%02x%02x%02x%02x%02x", 6 guid.Data1, guid.Data2, guid.Data3, 7 guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], 8 guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]); 9 10 wchar_t comandLine[500] = {}; 11 swprintf_s(comandLine, L"\"%s\" \"%s\"", L"Exeのパス", guidString);

投稿2019/08/31 04:12

nomuken

総合スコア1627

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JanTh1989

2019/09/03 06:04

ご回答ありがとうございます。 確認が遅くなってしまい、申し訳ありません。 回答で挙げて頂いたフォーマットで文字列化するという方法については浮かびませんでした。 参考になりました。
Zuishin

2019/09/03 06:12

意味不明な質問が意味不明の経緯で迷走して車輪の再発明というよくわからない解決へ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問