1

私は次のコードを持っています:

int _tmain(int argc, char** argv) {
  bool g_graphics = true;
  palPhysics * pp = 0;
  #ifndef PAL_STATIC
  PF -> LoadPALfromDLL();
  #endif
  char a[] = "Bullet";
  std::string aa;
  aa = std::string(argv[1]);
  //PF->SelectEngine("Bullet");
  DebugBreak();
  PF -> SelectEngine(argv[1]);
  //PF->SelectEngine(aa);
  //debug
  //    assert(false);
  pp = PF -> CreatePhysics();
}

コマンドライン引数noを読み込もうとしています。この行に 1:

PF->SelectEngine(argv[1]);

ただし、引数の最初の文字しか取得できません。私も変えてみました

int _tmain(int argc, char** argv)

int _tmain(int argc, TCHAR** argv), but then I get

エラー:

error C2664: 'palFactory::SelectEngine' : cannot convert parameter 1 from 'TCHAR *' to 'const PAL_STRING &'

PAL_STRING は単なる std::string です。

これは単純なものかもしれませんが、TCHAR を std::string に変換する方法がわかりません。特に、TCHAR はコンパイラの環境設定によって異なるためです。自分で何かを変換する必要がないように、コマンドライン引数を機能させる簡単な方法を知っている人はいますか?

ありがとう!

更新: コマンド ラインでの呼び出しの例:

うん。コマンドラインでこれを呼び出す方法は次のとおりです。

progname.exe arg1 arg2,

ここで、arg1 はロードしようとしている物理エンジンであり、arg2 は dae (物理情報を含む物理ファイル) であるため、具体的には次のようになります。

progname.exe 箇条書き E:/a.dae

「PF->SelectEngine(argv[1]);」という行にステップインします。次のコードを提供します。

bool palFactory::SelectEngine(const PAL_STRING& name) { #ifdef INTERNAL_DEBUG printf("palFactory::SelectEngine: this = %p\n", this); #endif SetActiveGroup(name); // also calls RebuildRegistry return isClassRegistered("palPhysics"); }

、この場合、デバッグ時に、const PAL_STRING& の名前、つまり文字列が、私が期待していたものではなく、単なる「B」であることがわかります。これは、渡したコマンドライン引数「弾丸」です。コマンドライン。

4

1 に答える 1

0

私は何年もの間、この問題に悩まされてきました。私が見つけた唯一の解決策は、Visual Studio を使用しないことです。コマンドライン引数を処理できるようにする必要がある場合は、他のコンパイラを使用する必要がありました。特に、私は Digital Mars コンパイラをうまく使っています。コマンドライン引数を正しく処理します。インテリセンスとデバッグに VS 環境を使用し、DMC でコンパイルしてデプロイします。

---以下を編集---

結局のところ、私は正しい質問をしていませんでした。私はついに正しい質問をし、正しい答えを得ました!以下のリンクを参照してください。

C++ の _tmain() と main() の違いは何ですか?

于 2013-05-02T18:08:26.397 に答える