C'den Delphiye - Delphi'den C'ye dönüştürücü

Başlatan z, 01 Aralık 2015, 20:42:55

z

Şimdi aklıma böyle bir şey geldi.

Yapılmaması için hiç bir neden yok. kaynak kodları vereceğiz biri birine dönüşüm yapacak.

Süper olur. Muhakkak birisi yazmıştır araştırmadım.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

engerex

#1
 Ancak denediklerimde yarısından biraz fazlasını çeviriyordu.
Birileri çıkıp ikisi arasındaki farkları örneklerle ortaya koysa güzel olacak.

trinity

Delphi pascal tabanlı bir dil, yapı itibariyle C diline çok benzer , kodlarını birbirine çevirmek çokta zor değil. Fakat bu iki dil derlemede farklı kütüphaneler kullanıyorlar, ilk önce bu kütüphanelerinde birbirine çevrilmesi gerekli ki bunlardan bir kısmı kapalı kaynak kodlu (.dll) kütüphanelerdir. Bu da epey bir iş yükü anlamına gelir. Zaten bu yüzden platformdan bağımsız Java, .net gibi programlama dilleri ortaya çıktılar.

z

O kısmı elle hallolur.

Temel syntax dönüşümünü bile yapsa bayağı bir iş yükünü kaldırır.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ercan_t

merhaba,

delphide yazılım yazarken C gibi yazmaya dikkat ediyorum, böylelikte daha kolay oluyor.
bir unit yaptım,yazılımda direkt C fonksiyonları kullanır gibi tanımlamalar yaptım

örneğin

Type // Biz Kendi Değişken Tiplerimiz.. :)
  U8 = Byte; // unsigned 8 bit 0..255                   (1 byte işaretsiz)
  S8 = Shortint; // signed 8 bit -128..127                  (1 byte işaretli)

  U16 = Word; // unsigned 16 bit 0..65535                (2 byte işaretsiz)
  S16 = Smallint; // signed 16 bit -32768..32767             (2 byte işaretli)

  U32 = LongWord; // unsigned 32 bit 0..4294967295           (4 byte işaretsiz)
  S32 = Integer; // signed 32 bit -2147483648..2147483647   (4 byte işaretli) "integer ile aynı"
  R32 = Single; // signed 32 bit 1.5 x 10^45 .. 3.4 x 10^38   4
P_Char = PAnsiChar;
  P_String = PAnsiString;

....
...
.
function strlen(const Source: _String): U32;
begin
  result := length(Source);
end;

Procedure sprintf(var Dest: String; const in_Logs: String; in_AArgs: array of const);
Begin
  Dest := format(in_Logs, in_AArgs);
End;

Procedure memcpy(Dest: P_Char; Source: P_Char; DataLen: U16);
begin
  CopyMemory(Dest, Source, DataLen);
end;

Procedure memset(Dest: P_Char; value: U8; DataLen: U16);
begin
  FillMemory(Dest, DataLen, value);
end;

engerex

@ercan_t Bunun için kendi kütüphaneni oluşturmuşsundur,  güzel taktik. Yalnız yapamayacağın şeylerde var. Mesela soru işareti operatörü koşul?if_komut(lar):else_komutlar
Veya i++ ve *= gibi.

trinity

Alıntı yapılan: engerex - 02 Aralık 2015, 19:59:12
@ercan_t Bunun için kendi kütüphaneni oluşturmuşsundur,  güzel taktik. Yalnız yapamayacağın şeylerde var. Mesela soru işareti operatörü koşul?if_komut(lar):else_komutlar
Veya i++ ve *= gibi.

Mesela C de yazılmış DirectX collision'u uygulamasını Delphi'ye çevirmek gibi :D Zaten Delphi'nin windows kütüphanelerine direk erişimide yok. Araya pascalla 100 sayfa interface yazmak gerekiyor.