Отладка Фортрана, смешанного с C++/CLI

У меня есть решение (VS 2015) с консольным приложением Fortran (проект Intel Fortran) и библиотекой C++/CLI. Я звоню в библиотеку C++ через Fortran C-bindings.

Пример функции на стороне C++:

extern "C" __declspec(dllexport) void PrintInteger(const int * const a)
{
  std::cout << *a << std::endl;
}

Соответствующая функция на стороне Фортрана:

module CplusplusWrapper
  interface
    subroutine PrintInteger(a) bind (C, name = "PrintInteger" )
      use iso_c_binding
      implicit none
      integer (c_int), intent(in) :: a
    end subroutine
  end interface
end module

Теперь, к счастью, я получил это на работу. И я даже могу начать отладку приложения на Фортране и затем перейти к так называемому коду C++. Однако, как только я добавляю какие-либо управляемые функции в свой проект C++/CLI, это больше не работает. Это даже не должно быть в той же функции, это может быть совершенно другой файл...

Я уже пытался зайти в C++ - свойства проекта -> Конфигурация -> Отладка и установить тип отладчика "смешанный", безрезультатно.

Любые советы о том, как включить отладку в управляемый код?

1 ответ

Решение

Я нашел решение своей проблемы, которое описано на сайте Intel.

Создайте фиктивную библиотеку классов C#, которая не должна содержать никаких файлов. Установите этот фиктивный проект как стартовый проект вашего решения (щелкните правой кнопкой мыши -> установить как стартовый проект).

На странице параметров нового проекта в разделе "Отладка" установите "Начать действие" с "Начать проект" на "Запускать внешнюю программу" и выберите свой исполняемый файл fortran. Далее, отметьте опцию "Включить отладку собственного кода".

Чтобы получить правильный порядок сборки в Visual Studio, щелкните правой кнопкой мыши свой проект, выберите "Построить зависимости" -> "Проектные зависимости" и отметьте галочкой свое приложение на Fortran. Это гарантирует, что приложение fortran будет сначала построено, если оно устарело, когда вы нажмете "Начать отладку".

Вполне возможно использовать любой другой тип управляемого проекта (VB.NET, C++/CLI, ...) как фиктивный проект, однако я не проверял это, так как мое решение в любом случае содержит проекты на C#.

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