У меня есть оконное приложение C #, которому нужно использовать сторонний API, который предлагается только на C. Чтобы решить эту проблему, я создал три проекта в рамках VS2008: два проекта C # и пустой проект C ++. , Один проект C # - это мой проект Wrapper, отвечающий только за создание управляемого кода, который вызывает C DLL. Другой проект C # - это оконное приложение, которое использует проект Wrapper; давайте назовем это проектом GUI.
Внутри проекта C ++ я создал несколько файлов C (* .c), которые используют сторонний API и экспортируют (dllexport) подходящие функции. Я могу успешно скомпилировать этот проект в DLL, и у меня не было проблем с вызовом этих функций из моего проекта Wrapper. В случае необходимости мой проект Wrapper использует атрибуты DllImport для ссылки на эти функции.
В моем проекте C ++ есть событие после сборки, которое копирует полученную DLL в выходной каталог моего проекта C # с графическим интерфейсом, чтобы он был обнаружен во время выполнения. Это немного мрачно, но это единственный способ, который я понял, как это сделать. Мой GUI-проект зависит от моего проекта Wrapper, который зависит от C ++ проекта.
Однако я изо всех сил пытаюсь отладить (то есть пошагово) код моего C-проекта. Я пытался установить точку останова в коде C в надежде, что она будет обнаружена, когда мой код C # выполнит соответствующую функцию. К сожалению, как только я запускаю свое приложение C #, среда IDE предупреждает меня, что точки останова C никогда не будут выполнены: " Для этого документа не было загружено символов ."
Любая помощь с этим будет принята с благодарностью. Вот некоторые вещи, с которыми я играл, но безрезультатно:
Убедитесь, что файл .pdb имеет ту же временную метку, что и файл DLL. Этот совет последовал после того, как случайный Google предположил, что это может быть вызвано ошибкой «Нет символов».
Я выбрал «Включена отладка неуправляемого кода» в свойствах моего проекта C #.
Я попытался установить точку останова в своем вызове C # непосредственно перед вызовом одного из методов DLL и попытался войти в DLL. Это тоже не сработало, просто перешагнуло через функцию.