Я пишу модульный тест для функции 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;
Хотя было бы, если бы вместо \: Живая демонстрация на coliru использовался \\. (Это то, чего я не ожидал.) Однако, вероятно, все еще нет решения вашей проблемы ... (А это означает, что даже если разделение кавычками сработает, оно не образует действительную строку C.)
@Scheff Спасибо за ответ, поэтому я попробовал _SOLUTIONDIR = "$(SolutionDir);"
. он возвращает #define _SOLUTIONDIR "C:\*\Project\\" expands to "C:\*\Project\\"
, но то, что находится между двойными кавычками, не имеет класса типа
Решение заключалось в том, чтобы определить _SOLUTIONDIR
следующим образом
_SOLUTIONDIR=R"($(SolutionDir))"
Хорошее использование необработанного строкового литерала, но остерегайтесь путей, заканчивающихся на )
!
Я попытался решить эту проблему с помощью оператор строкового преобразования макроса, но это не сработало. Живая демонстрация на coliru Итак, единственный шанс заключить
$(SolutionDir)
в кавычки. Вы можете проверить, работает ли это (при правильной замене). В противном случае я не вижу шансов.