C++, как получить каталог решения в коде

Я пишу модульный тест для функции 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 Итак, единственный шанс заключить $(SolutionDir) в кавычки. Вы можете проверить, работает ли это (при правильной замене). В противном случае я не вижу шансов.

Scheff's Cat 30.10.2018 10:27

Хотя было бы, если бы вместо \: Живая демонстрация на coliru использовался \\. (Это то, чего я не ожидал.) Однако, вероятно, все еще нет решения вашей проблемы ... (А это означает, что даже если разделение кавычками сработает, оно не образует действительную строку C.)

Scheff's Cat 30.10.2018 10:30

@Scheff Спасибо за ответ, поэтому я попробовал _SOLUTIONDIR = "$(SolutionDir);". он возвращает #define _SOLUTIONDIR "C:\*\Project\\" expands to "C:\*\Project\\" , но то, что находится между двойными кавычками, не имеет класса типа

Amir-Mousavi 30.10.2018 10:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
1 107
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решение заключалось в том, чтобы определить _SOLUTIONDIR следующим образом

_SOLUTIONDIR=R"($(SolutionDir))"

Хорошее использование необработанного строкового литерала, но остерегайтесь путей, заканчивающихся на )!

Quentin 30.10.2018 11:47

Другие вопросы по теме