singlepost

C# + С++ .Net << На главную или назад  

Есть необходимость написать приложение разбирающее мат выражение с помощью дерева.
Т.к. в С# нет указателей решил писать на С++. Проблема в том что при подключении DLLк С# экзешнику, который тестирует библиотеку невозможно запустить отладку в коде библиотеки. Бреакпоинтыпросто не срабатывают. Как сделать так чтобы я мог отлаживать баблиотеку?

Само приложение будет выглядеть так: с формы в С# передается выражение в DLL, она возрашает вычисленное значение и структуру чтобы нарисовать дерево на форме.

P.S. если есть какие нибудь другие предложения по реализации, выслушаю с удовольствием.
P.S.S C++.Net знаю плохо, врядли напишу gui на нем

19 ответов в теме “C# + С++ .Net”

Страницы: [1] 2 »

  1. 1
    Павел Потапов ответил:

    А чем C# не устроил? Для дерева необязятельно иметь указатели, шарповые ссылки прекрасно подходят. Вот если будет тормозить, то имеет смысл писать на плюсах… а так – лучше использовать шарп. Имхо.

  2. 2
    Николай Кудряшов ответил:

    .

  3. 3
    Евгений Гаврин ответил:

    Запустить проект дллки.
    Понатыкать там брейкпоинтов.
    В свойствах проекта dll указать название шарповского эзешника.
    Запустить отладку из dll проекта.

    Это если я правильно понимаю ваши желания.

  4. 4
    Cyber Max ответил:

    1-е каким именно способом передается выражение в DLL ?
    2-е не забываем про соглашения о вызовах функция в "С"-языках
    3-е DLL – DEBUG или RELEASE?
    4-е есть режим ассемблерной отладки доходим до вызова call и выбираем пошаговую отладку с заходом в функцию, как окажимся внутри dll переключаемся в режим отладки по коду (если конечно DEBUG dll)
    5-е Ну и конечно __asm int 3 никто не отменял еще…

  5. 5
    Евгений Гаврин ответил:

    #5 Чувак, ты слишком умный – тебе это мешает ))))

  6. 6
    Il Il ответил:

    xD

  7. 7
    Сергей Яценко ответил:

    В настройках C# проекта в секции Debug поставь галочку Enable unmanaged code debugging

  8. 8
    Борис Осипов ответил:

    #2 спасибо как то даже не думал попробую.
    #4 такие бреаки не срабатывают.
    #5
    1 создается экземпляр класса описаный в dll и вызывается его конструктор и потом тестовый метод
    2 методы срабатываю отлично
    3 DEDUG
    4 трудно код большой будет запутаешься
    5 аналогично
    #8 попробую

  9. 9
    Cyber Max ответил:

    >> 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-ки и перейти в нормальный режим отладки кода…

  10. 10
    Борис Осипов ответил:

    это не то что есть. это пример на псевдокоде. специально для Cyber Max.если будет не понятно могу в выходные вам выслать исходники на почту(мыло в личку).не понял почему вы назвали вызов конструктора из си шарпа бредом
    dll c++//синтаксис и семантика не сохранена.лишь смысл
    public class temp
    {
    public temp(string^ exp)
    {
    //тут код конструктора
    }
    exe c#
    Main
    {
    temp t = new temp("2+2");
    }

Страницы: [1] 2 »

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.