2010-10-13 1 views
2

У меня есть оконное приложение на C#, которое должно использовать сторонний API, который предлагается только в C. Чтобы решить эту проблему, ve создал три проекта в VS2008: два проекта C# и пустой проект на C++. Один проект C# - это мой проект «Wrapper», который отвечает только за создание управляемого кода, который вызывает C DLL. Другой проект C# - это оконное приложение, которое использует проект Wrapper; назовем это проектом GUI.Как отлаживать C DLL при вызове из приложения C# в Visual Studio 2008

Внутри проекта 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. Это тоже не сработало, просто перешагнуло функцию.

+0

вы имеете в виду .pdb файл нет .pcb –

+0

Я уверен, сделал, отредактировал. Благодарю. –

+0

Вы пытались войти в функцию C? Это всегда сработало для меня. – leppie

ответ

0

Вы должны проверить в списке модулей (обычно находится в меню Отладка в Visual Studio), чтобы убедиться, что:

  • загружен модуль
  • Он загружается с правой стороны место
  • символы были загружены правильно

Если окно содержит список модуля, но указывает на то, что символы ар en't загружен, вы можете заставить VS загружать символы, щелкнув правой кнопкой мыши на модуле и выбрав «Загрузить символы». Если он не может найти их автоматически, он подскажет вам путь.

+0

Мы могли бы стать победителем здесь.Список модулей показывает красный восклицательный знак и предупреждает меня, что двоичный файл не был создан с информацией об отладке. –

+0

Упс, опубликовано слишком рано. Во всяком случае, я попытался загрузить файл символов, и он предупреждает меня, что он не соответствует. У меня теперь есть запах, поэтому я уверен, что в любой момент я смогу найти решение. Я буду отмечать вас как ответчика, как вы послали меня в правильном направлении. В ближайшее время прокомментируем ответ с полным ответом. –

+0

@ Duncan - Похоже, вам нужно проверить настройки сборки отладочной информации для вашего проекта на C++. – Justin

Смежные вопросы