【问题标题】:c++, how to Get the solution directory in the codec++,如何在代码中获取解决方案目录
【发布时间】:2018-10-30 08:44:38
【问题描述】:

我正在为一个返回其完整路径的 dll 函数编写单元测试。 测试项目和dll项目都在同一个解决方案中。

我正在考虑获取解决方案目录并将其余路径附加到断言。

在测试项目的预处理器定义中定义:_SOLUTIONDIR=$(SolutionDir);

但在测试文件中我得到#define _SOLUTIONDIR C:\*\Project\ expands to C:\*\Project\ unrecognized token

我应该如何转换或将其转换为字符串?或者一般来说,获取相对路径的最佳方法是什么?

dll file has function returning 
--------------------------------
 EXTERN_C IMAGE_DOS_HEADER __ImageBase;
LPTSTR  strDLLPath1 = new TCHAR[_MAX_PATH];
        ::GetModuleFileName((HINSTANCE)&__ImageBase, strDLLPath1, _MAX_PATH);
        wstring temp1(strDLLPath1);
        string temp2(temp1.begin(), temp1.end());
return temp2;

【问题讨论】:

  • 我试过macro stringize operator是否可以解决这个问题,但它不起作用。 Live Demo on coliru 因此,唯一的机会可能是将 $(SolutionDir) 括在引号中。您可以测试这是否有效(适当更换)。否则,我看不到机会。
  • 虽然,如果使用 \\ 而不是 \:Live Demo on coliru。 (这是我没有预料到的。)但是,您的问题可能仍然没有解决方案......(这意味着即使用引号分隔它也不会形成有效的 C 字符串。)
  • @Scheff 感谢您的回复,所以我尝试了_SOLUTIONDIR="$(SolutionDir);"。它返回 #define _SOLUTIONDIR "C:\*\Project\\" expands to "C:\*\Project\\" 但双引号之间的内容没有任何类型类

标签: c++ visual-c++ macros preprocessor


【解决方案1】:

解决方案是定义_SOLUTIONDIR如下

_SOLUTIONDIR=R"($(SolutionDir))"

【讨论】:

  • 很好地使用原始字符串文字,但要注意以 )! 结尾的路径!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多