Есть необходимость написать приложение разбирающее мат выражение с помощью дерева.
Т.к. в С# нет указателей решил писать на С++. Проблема в том что при подключении DLLк С# экзешнику, который тестирует библиотеку невозможно запустить отладку в коде библиотеки. Бреакпоинтыпросто не срабатывают. Как сделать так чтобы я мог отлаживать баблиотеку?
Само приложение будет выглядеть так: с формы в С# передается выражение в DLL, она возрашает вычисленное значение и структуру чтобы нарисовать дерево на форме.
P.S. если есть какие нибудь другие предложения по реализации, выслушаю с удовольствием.
P.S.S C++.Net знаю плохо, врядли напишу gui на нем
26 октября 2009 в 12:02
А чем C# не устроил? Для дерева необязятельно иметь указатели, шарповые ссылки прекрасно подходят. Вот если будет тормозить, то имеет смысл писать на плюсах… а так – лучше использовать шарп. Имхо.
26 октября 2009 в 13:00
.
26 октября 2009 в 13:03
Запустить проект дллки.
Понатыкать там брейкпоинтов.
В свойствах проекта dll указать название шарповского эзешника.
Запустить отладку из dll проекта.
Это если я правильно понимаю ваши желания.
26 октября 2009 в 13:05
1-е каким именно способом передается выражение в DLL ?
2-е не забываем про соглашения о вызовах функция в "С"-языках
3-е DLL – DEBUG или RELEASE?
4-е есть режим ассемблерной отладки доходим до вызова call и выбираем пошаговую отладку с заходом в функцию, как окажимся внутри dll переключаемся в режим отладки по коду (если конечно DEBUG dll)
5-е Ну и конечно __asm int 3 никто не отменял еще…
26 октября 2009 в 14:00
#5 Чувак, ты слишком умный – тебе это мешает ))))
26 октября 2009 в 14:04
xD
26 октября 2009 в 16:01
В настройках C# проекта в секции Debug поставь галочку Enable unmanaged code debugging
26 октября 2009 в 17:05
#2 спасибо как то даже не думал попробую.
#4 такие бреаки не срабатывают.
#5
1 создается экземпляр класса описаный в dll и вызывается его конструктор и потом тестовый метод
2 методы срабатываю отлично
3 DEDUG
4 трудно код большой будет запутаешься
5 аналогично
#8 попробую
26 октября 2009 в 18:05
>> 1 создается экземпляр класса описаный в dll и вызывается его
>> конструктор и потом тестовый метод
Я имел в виду способ передачи по средствам вызова функции из DLL,
как выглядит в C# вызов?
или (даже трудно представить такой бред) вызывается конструктор из кода на C# ?
>> 4 трудно код большой будет запутаешься
Вообще не понимаю в чем трудность:
Доходим в отладчике до вызова функции:
—-> nRes = SomeFunctionFromDll(, , ,);
вместо F8 переключаемся в режим ассемблера:
—-> push param1
push param2
push param3
сallSomeFunctionFromDll
на вызове call давим F8 для входа в функцию.
как только оказались там снова переключаемся в режим исходного кода и продолжаем.
>> 5 аналогично
Что тут трудного в начале
int SomeFunctionFromDll(, , , )
{
__asm int 3;
….
}
И хочешь не хочешь, а в отладчик вывалишся который должен подхватить символы DLL-ки и перейти в нормальный режим отладки кода…
27 октября 2009 в 22:04
это не то что есть. это пример на псевдокоде. специально для Cyber Max.если будет не понятно могу в выходные вам выслать исходники на почту(мыло в личку).не понял почему вы назвали вызов конструктора из си шарпа бредом
dll c++//синтаксис и семантика не сохранена.лишь смысл
public class temp
{
public temp(string^ exp)
{
//тут код конструктора
}
exe c#
Main
{
temp t = new temp("2+2");
}