У меня есть оконное приложение на 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. Это тоже не сработало, просто перешагнуло функцию.
вы имеете в виду .pdb файл нет .pcb –
Я уверен, сделал, отредактировал. Благодарю. –
Вы пытались войти в функцию C? Это всегда сработало для меня. – leppie