-
Ребят, у кого был опыт подключения PAS файлов к сишному проекту? Сейчас занимаюсь с парнем на тему отладчика, и лениво столько кода портировать на си, решил подрубить свой старый модулек http://rouse.drkb.ru/winapi.php#dbgА он зараза выдает ошибки плана: [ilink32 Error] Fatal: Unable to open file 'SYSTEM.SYSUTILS.OBJ' А как без SYSUTILS-то? У меняж там исключения кидаются. Где что подкрутить чтоб скомпилировалось?
-
Вроде особых нюансов не помню. Просто добавляешь в Си++ Билдер проект паскалевский файл, среда при сборке вызовет компилятор Делфи, он сгенерирует obj и заголовок *.h. Заголовок надо будет #include куда надо. Иногда бывают небольшие проблемы с заголовком, но это можно устранить в паскалевском иходнике.
Ну а линкеру вообще без разницы как бы чьи obj собирать. Может у тебя в настройках проекта путь какой не прописан с системным библиотекам?
-
Ну я вчера с нуля триальную версию си билдера поставил т.е. ничего не настраивал, создаю новый проект и подключаю свой FWDebugerCore.pas - все больше ничего не трогаю - ну и билд. Никаких заголовочных H файлов он не создал.
-
Подключал так-же как и в дельфи, т.е. Project->Add to Project
-
Можешь у себя проверить? там только (как в моем случае) если у тебя билдер последний, то параметр Dummy нужно изменить с DWORD на NativeUInt. Скомпилируется или нет?
-
> [1] Inovet © (04.12.16 10:15) > *.h
*.hpp Вернее
> [2] Rouse_ © (04.12.16 10:21) > FWDebugerCore.pas
Щас попробую твой
-
Удалено модератором
-
Чёт я лишнего закопипипастил.
-
Так, ну у тебя хоть до этого дошло... Дай плз в виде строки свои настройки из Tools->Library для 32 бит Похоже там у меня что-то не верно
-
Library path короче
-
-
Потри сообщение, чтобы не отсечивало [6] Inovet © (04.12.16 10:33)
-
Угу грохнул. Щас проверю
-
Ещё, как вариант. Можно откомпилировать заранее в DCU с генерацией *.hpp, и уже просто заголовок добавлять, ну и чтобы *.dcu был доступен в путях поиска.
-
Так, погоди - скомпилялось :) Сам не понял что сделал :)
-
Да, вроде зафурычило, осталось понять как с ним в сишном коде работать - конструктор обработчики, но это я уже щас в справку погружусь. Спасибо, выручил :)
-
> [15] Rouse_ © (04.12.16 11:10)
Это хорошо.
А почему ошибки были? Какие-то особенности между версиями Delphi? Я уж вникать не стал.
-
Я не понял - взял твой проект, он ругнулся на декларацию GetMappedFileNameA - но она мне не особо сейчас нужна - закоментил кусок кода и все заработало
-
Лучше скажи мне - бо я дольше искать буду. Как в билдере новый класс создать и обработчики ему назначить? Я дольше читать буду :) Оть так не фурычит
TFWDebugerCore: Debuger; //Debuger = TFWDebugerCore.Create; Debuger = new TFWDebugerCore;
как правильно?
-
> [18] Rouse_ © (04.12.16 11:20) > как правильно?
TFWDebugerCore *dc = new TFWDebugerCore(параметры коструктора, или одного из них, если их несколько); try { ... dc->AttachToProcess(параметры) ... } __finally { delete dc // здесь будет вызван деструктор. }
-
> [19] Inovet © (04.12.16 11:27)
Ну там точки с запятой я не поставил. TFWDebugerCore *dc = new TFWDebugerCore(параметры коструктора, или одного из них, если их несколько);
try
__finally
-
Ага, уже сам расставил - фурычит, спасибо :)
-
Ну т.е. как это можно было бы сделать с чиcто Си++ классами, делать нельзя, поскольку Делфи классы на стеке нельзя размещать.
-
Последнее - извнии что достаю: void __fastcall TForm1::FormCreate(TObject *Sender)
__finally ;
} У меня обработчик обьявлен вот так: 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
; Ну и в 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' Куда еще руки поправить?
-
> [23] Rouse_ © (04.12.16 11:48) > Последнее - извнии что достаю:
Та ладно уж, доставай.:) Это мозговыносная часть Си++. Тут должно быть что-то вот такое
OnBreakPoint = &OnBreakPoint;
Это вот OnBreakPoint имя функции-обработчика.
-
Так, тыж у меня в скайпе есть, щас тогда с домашнего к тебе стукнусь
-
> [24] Inovet © (04.12.16 12:06) > OnBreakPoint = &OnBreakPoint;
В смысле - вот так объявлена переменная для хранения указателя на функцию обработчика
TBreakPointEvent OnBreakPoint;
а так присваиваем ей обработчик
OnBreakPoint = &OnBreakPoint;
|