命令行参数不起作用(char,TCHAR)VS2010

时间:2013-04-08 22:37:16

标签: visual-studio-2010 visual-c++ char main tchar

我有以下代码:

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是其他东西,具体取决于编译器/环境设置。是否有人知道一种简单的方法来使命令行参数起作用,这样我就不需要自己转换任何东西了,我可能通过更改tmain函数?

谢谢!

C

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

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

progname.exe arg1 arg2,

其中arg1是我试图加载的物理引擎,而arg2是dae(物理信息的物理文件),所以我去了,具体来说:

progname.exe Bullet 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"); }
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& name,即字符串,只是“B”,而不是我期望的那样,即“Bullet”,我在命令行中传递的命令行参数。

1 个答案:

答案 0 :(得分:0)

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

---编辑以下---

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

What is the difference between _tmain() and main() in C++?