Конференция "Основная" » C++ Builder и PAS файлы
 
  • Inovet © (04.12.16 11:28) [20]
    > [19] Inovet ©   (04.12.16 11:27)

    Ну там точки с запятой я не поставил.
    TFWDebugerCore *dc = new TFWDebugerCore(параметры коструктора, или одного из них, если их несколько);

    try {
    ...
    dc->AttachToProcess(параметры);
    ...
    }

    __finally {
    delete dc; // здесь будет вызван деструктор.
    }


  • Rouse_ © (04.12.16 11:34) [21]
    Ага, уже сам расставил - фурычит, спасибо :)
  • Inovet © (04.12.16 11:40) [22]
    Ну т.е. как это можно было бы сделать с чиcто Си++ классами, делать нельзя, поскольку Делфи классы на стеке нельзя размещать.


    { // какой-то блок кода
     TFWDebugerCore dc(параметры коструктора, или одного из них, если их несколько);
     ...
     dc.AttachToProcess(параметры);
     ...
    }
    // здесь будет вызван деструктор.

  • Rouse_ © (04.12.16 11:48) [23]
    Последнее - извнии что достаю:

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    TFWDebugerCore *debuger = new TFWDebugerCore(0xFFFFFFFF);
    try {
    //   debuger->OnBreakPoint = OnBreakPoint; // <<< как правильно задекларировать?
      debuger->DebugNewProcess("C:\\Program Files (x86)\\Subway Surfers\\Subway_Surfers.exe", True);
      debuger->RunMainLoop();
    }

    __finally {
      delete debuger;
    }
    ;
    }



    У меня обработчик обьявлен вот так:

    typedef void __fastcall (__closure *TBreakPointEvent)(System::TObject* Sender, int ThreadIndex, const _EXCEPTION_RECORD &ExceptionRecord, int BreakPointIndex, bool &ReleaseBreakpoint);



    если это задекларировать в H файле то с директивой (__closure *TBreakPointEvent) рукается, обьявил вот так:

    class TForm1 : public TForm
    {
    __published: // IDE-managed Components
    void __fastcall FormCreate(TObject *Sender);
    private:
    public:  // User declarations
     __fastcall TForm1(TComponent* Owner);
     __fastcall OnBreakPoint(System::TObject* Sender, int ThreadIndex, const _EXCEPTION_RECORD &ExceptionRecord, int BreakPointIndex, bool &ReleaseBreakpoint);
    }
    ;



    Ну и в CPP оть такая декларация:
    __fastcall OnBreakPoint(System::TObject* Sender, int ThreadIndex, const _EXCEPTION_RECORD &ExceptionRecord, int BreakPointIndex, bool &ReleaseBreakpoint)
    {
    // ...
    }



    Пишет:
    [bcc32 Error] Unit1.cpp(23): E2034 Cannot convert 'int (_fastcall * (_closure )(TObject *,int,const _EXCEPTION_RECORD &,int,bool &))(TObject *,int,const _EXCEPTION_RECORD &,int,bool &)' to 'TBreakPointEvent'

    Куда еще руки поправить?
  • Inovet © (04.12.16 12:06) [24]
    > [23] Rouse_ ©   (04.12.16 11:48)
    > Последнее - извнии что достаю:

    Та ладно уж, доставай.:)

    Это мозговыносная часть Си++. Тут должно быть что-то вот такое

    OnBreakPoint = &OnBreakPoint;


    Это вот OnBreakPoint имя функции-обработчика.
  • Rouse_ © (04.12.16 12:08) [25]
    Так, тыж у меня в скайпе есть, щас тогда с домашнего к тебе стукнусь
  • Inovet © (04.12.16 12:11) [26]
    > [24] Inovet ©   (04.12.16 12:06)
    > OnBreakPoint = &OnBreakPoint;

    В смысле - вот так объявлена переменная для хранения указателя на функцию обработчика

    TBreakPointEvent OnBreakPoint;


    а так присваиваем ей обработчик

    OnBreakPoint = &OnBreakPoint;

 
Конференция "Основная" » C++ Builder и PAS файлы
Есть новые Нет новых   [118643   +48][b:0][p:0.001]