Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.14;
Скачать: CL | DM;

Вниз

Конвертировать с C в Delphi   Найти похожие ветки 

 
dreamse   (2005-07-20 15:00) [0]

Подскажите пожайлуста конвертор с C на Delphi а то код большой на С , а я не шарю в этом языке :(

На delphi нужно перевести.


 
syte_ser78 ©   (2005-07-20 15:06) [1]

если такие конвертеры и есть то переведут они лишь чтото наподобие

void a()
{
if (b==1) b=2;
}

в

procedure a;
begin
if b=1 then b:=2;
end;

и врядли чтото сложнее


 
Алхимик ©   (2005-07-20 15:06) [2]

Набираешт в яндексе c2pas или cpp2pas, качаешь то что по ссылочкам, убеждаешься что все это лажа.


 
dreamse   (2005-07-20 15:11) [3]

> syte_ser78 ©   (20.07.05 15:06) [1]

По крайне мере не в ручную код переводить, слишком много :(


 
Igorek ©   (2005-07-20 15:35) [4]

Алхимик ©   (20.07.05 15:06) [2]
Набираешт в яндексе c2pas или cpp2pas, качаешь то что по ссылочкам, убеждаешься что все это лажа.

:)
На самом деле зависит, что за исходники. Если самодостаточный файл С/С++ без инклюдов, внешних макросов, шаблонов, перезагрузок операторов и прочих наворотов, то переводит неплохо. Т.е. перевод одного простого файла можно сделать. А если надо весь проект, да еще сделаный в кодогенераторах типа Builder/VC, да еще с библиотечными макросами (шоб ими Майрософт подавился) то - :( (интерактивный нудный процесс).


 
PVOzerski ©   (2005-07-20 15:46) [5]

Как частичное решение использую http://www.astonshell.com/files/c2pas.zip . Но особо обольщаться не советую. А уж если в Си++-коде окажутся, например, шаблоны...


 
Igorek ©   (2005-07-20 16:08) [6]

PVOzerski ©   (20.07.05 15:46) [5]
А уж если в Си++-коде окажутся, например, шаблоны...

И даже не шаблоны и просто статические переменные..
Напр. код
void f1(void)
{
   static int a;
}
void f2(void)
{
   static int a;
}

оно переведет в
var:
 a: Integer;
var:
 a: Integer;
procedure f1;
begin
end
procedure f2;
begin
end


 
Digitman ©   (2005-07-20 16:16) [7]


> Igorek ©   (20.07.05 16:08) [6]


нормально переведено
в чем ты видишь ненормальность этого перевода ?


 
PVOzerski ©   (2005-07-20 16:23) [8]

Ну, я бы, пожалуй, предпочел вот так:
{$J+}
var:
a: Integer;
procedure f1;
begin
end;
procedure f2;
const a: Integer = 0;
begin
end;
И тогда не возникнет ошибки компиляции из-за задублированной a.


 
Igorek ©   (2005-07-20 16:51) [9]

Digitman ©   (20.07.05 16:16) [7]
нормально переведено
в чем ты видишь ненормальность этого перевода ?

Это риторический вопрос? Или шутка? :)
Во-первых не компилируется.
Во-вторых, если некоторые средства С++ не существуют в Паскале, то надо использовать то что есть.
Т.е. как минимум или:

implementation
var
   f1_a, f2_a: Integer;
initialization//если и в С++ инициализируется
   f1_a := 0;
   f2_a := 0;

или лучше как в [8]
{$J+}
procedure f1;
const a: Integer = 0;
begin
end;
procedure f2;
const a: Integer = 0;
begin
end;
{$J-}


А насчет шаблонов. Так они и в С++ если не используются, то не компилируются в бинарь. А если используются, то и специализируются - т.е. неявно генерируется код. А на Паскале это можно сделать явно. Т.е. обязательно переводить и шаблон и его использование разом.


 
Digitman ©   (2005-07-20 17:15) [10]


> Во-первых не компилируется


понятно что лошадь)


> Во-вторых, если некоторые средства С++ не существуют в Паскале,
> то надо использовать то что есть


далеко, как понимаешь, не всегда в Паскале найдется соотв.функц.эквивалент


> риторический вопрос? Или шутка?


пожалуй, нечто среднее.

ежу понятно, что идентификаторы дублированы.

с др.стороны, я не представляю, как в некоем очередном "шедевре" типа c2pas можно "разрулить" такие ситуации без напряга юзера а-ля "обнаружена такая-то ситуация с потенц. дублированием Паскаль-идентификаторов как результат конверсии по дифолту ... введите, мол, уник.идентификатор либо откажитесь от автоконверсии проблемной для Паскаля C-конструкции"

это ж затрахать юзера можно такими вопросами !
они же сплошь и рядом возникать будут ... и если бы только такие вопросы ! ... с макросами взять хотя бы - уж там-то засада метр на метр)


 
Igorek ©   (2005-07-20 18:42) [11]

Digitman ©   (20.07.05 17:15) [10]
Я раз переводил код с Обьектного Паскаля на С (не на С++).
Было:

interface
type
 A = class
   I: Integer;
   procedure f;
 end;
implementation
procedure A.f;
begin
end;


Стало:
int A_i;
void A_f(void) {};

И такое соглашение об именах хотел заказчик. Я к тому, что много соглашений можно забить по дефолту, и дать возможность их редактировать или переводить интерактивно (для продвинутого юзера). В том смысле, что это в принципе возможно. Ну а что не сделано в шедевре c2pas - это другой вопрос.



Страницы: 1 вся ветка

Текущий архив: 2005.08.14;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.033 c
4-1118705112
Strech
2005-06-14 03:25
2005.08.14
получение Background кисти окна


4-1118679326
ATarget
2005-06-13 20:15
2005.08.14
драйвер


4-1118668593
Толян
2005-06-13 17:16
2005.08.14
Запрос у пользователя имени и пароля


4-1119458310
XCept.ion
2005-06-22 20:38
2005.08.14
Kейлоггинг


14-1122285961
wnew_
2005-07-25 14:06
2005.08.14
Отпуск!!!