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();
}

我正在尝试读取命令行参数号。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 取决于编译器/环境设置。有没有人知道让命令行参数工作的简单方法,这样我就不需要自己转换任何东西,即可能通过更改 tmain 函数?

谢谢!

C

更新:在命令行上调用的示例:

是的。所以我在命令行上调用它的方式是:

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”,而不是我所期望的,即“Bullet”,我传入的命令行参数命令行。

4

1 回答 1

0

多年来,我一直被这个问题困扰。我能找到的唯一解决方案是不使用 Visual Studio。当我必须能够处理命令行参数时,我不得不回退到使用其他编译器。具体来说,我一直在成功使用 Digital Mars 编译器。它正确处理命令行参数。我使用VS环境进行智能感知和调试,然后用DMC编译部署。

---在下面编辑---

事实证明,我只是没有问正确的问题。我终于问对了问题,得到了正确的答案!请参阅下面的链接。

C++ 中的 _tmain() 和 main() 有什么区别?

于 2013-05-02T18:08:26.397 回答