【问题标题】:How can I open a file inside of an exe inside of my c++ app如何在我的 c++ 应用程序内的 exe 内打开文件
【发布时间】:2015-10-16 12:58:08
【问题描述】:

问题是我有这个按钮,当我点击它时,我希望它在特定的可执行文件中为我打开一个文件。

我对 c++ 有点生疏,这是一个使用 c++ 6.0 的遗留应用程序 建立在 windows xp .....所以任何帮助将不胜感激!

这是我的代码 cpp

void CJunkView::OnCadkeyButton() 

  {
   CString fileToOpen = "C:\\Documents and Settings\\Administrator\\Desktop\\x.prt";
   CString exePath = "C:\\CK19\\Ckwin.exe";
   system ("start (exePath), (fileToOpen)");
  }

当我单击此按钮时,它返回此 Windows 找不到“exePath”。请确保您输入了正确的名称,然后重试。

【问题讨论】:

  • 这里似乎没有任何迹象表明使用了 C++/CLI 代码(就像带有 MFC 的 C++)。
  • 您遗漏的部分是字符串插值在 C 或 C++ 中不是这样工作的

标签: c++ visual-c++ mfc


【解决方案1】:

您需要构建一个包含整个系统调用的字符串并将该字符串的缓冲区传递给system()

编辑:

针对IInspectable 的评论,我们可以只使用隐式转换运算符operator LPCTSTR()

void CJunkView::OnCadkeyButton() 
{
   CString fileToOpen = "C:\\Documents and settings\\Administrator\\Desktop\\x.prt";
   CString exePath = "C:\\CK19\\Ckwin.exe";
   CString cmd = "start " + exePath + ", " + fileToOpen;
   system (cmd);
}

【讨论】:

  • 谢谢你的帮助我只是厌倦了你的建议,它给了我这个错误。 GetBuffer' : 函数不接受 0 个参数 @NathanOliver
  • @Snowman288 对此感到抱歉。忘了GetBUffer() 需要一个尺寸。我已经习惯了在不需要的地方使用std::string
  • 感谢您,由于某种原因,我现在收到此错误 --> Windows 找不到“C:\CK19\Ckwin.exe”。请确保您输入了正确的名称,然后重试。 @NathanOliver
  • @Snowman288 "C:\\CK19\\Ckwin.exe" 可能需要是 "\"C:\\CK19\\Ckwin.exe\""
  • CString::GetBuffer 返回一个可修改的缓冲区,完成后需要调用CString::ReleaseBuffer。如果您只需要一个指向内部缓冲区的 const 指针,只需使用隐式转换运算符:system(cmd);。再说一次,当你有ShellExecuteEx 和朋友时,你为什么还要考虑启动命令解释器。
猜你喜欢
  • 2011-09-18
  • 1970-01-01
  • 2019-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多