Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2011, 21:31   #1
trwrt
Новичок
Джуниор
 
Регистрация: 10.04.2011
Сообщений: 6
По умолчанию Как переделать исходники из Delphi 7 в C++ Builder 6 ?

Доброго времени суток.
Как переделать исходники из Delphi в C++ Builder 6 ?, Срочно понадобилось
Идея витает давно: http://forum.codeby.net/topic2645.html http://www.programmersforum.ru/showthread.php?t=131427 http://www.cyberforum.ru/cpp-builder/thread272419.html

Но в данном случае речь идет о конкретном коде на Delphi 7
исходник "временного синхронизатора" nist_12_06_2009_00.zip
http://kladovka.net.ru/index.cgi?pid=list&rid=651
или weather_info.zip
http://www.delphisources.ru/pages/so...ther_info.html
Ищу специалистов-альтруистов способных помочь переписать код на
C++ Builder 6
и/или/т.е. напишите ссылку на ресурс с подобной реализацией вашей или найденной.
trwrt вне форума Ответить с цитированием
Старый 11.04.2011, 06:53   #2
trwrt
Новичок
Джуниор
 
Регистрация: 10.04.2011
Сообщений: 6
По умолчанию Re: Как переделать исходники из Delphi 7 в C++ Builder 6 ?

trwrt

Уточнение:
речь идет о конкретном коде на Delphi 7
исходник "временного синхронизатора" nist_12_06_2009_00.zip
http://kladovka.net.ru/index.cgi?pid=list&rid=651
и только одного файла:
226 06-11-09 16:58 udp.dpr

Есть еще планы объединения уже листингов от 3 программ на одну форму..такой "функциональный программный комбайн" (с Delphi это уже получилось).
А сам C++ Builder 6 случайно листинг может преобразовать от Delphi в свой код с++й?)))
Хотя есть рецепт, но нужен листинг с++! Плиз!
1. Создайте в C++Builder'е свой проект.
2. Выберите "Add to Project" в панели C ++ Builder 'а или в меню.
3. Выберите "Pascal unit" в типах файлов выпадающего списка диалогового окна открытия файлов.
4. Выберите модуль Delphi для добавления в свой проект и нажмите OK.
5. Перестройте свое приложение перед написанием кода, ссылающегося на модуль Delphi. Перестройка проекта создаст из модуля заголовок, который вы сможете включить в свое приложение.
6. Выберите пункт "File | Include Unit Hdr…" в главном меню C++Builder 'а и добавьте форму Delphi в ваше приложение.
7. Напишите код, который ссылается на модуль Delphi.
Когда вы перестраиваете приложение, C++Builder использует встроенный компилятор паскаля для создания obj -файла
А вот и ссылка рецепта: http://www.cyberguru.ru/programming/...ode-using.html
А вот obj - файлы я встречал 0_0 интересно на одной форме это заработает?
Это не помогло!!
Первая программа к которой нужно добавить "временной синхронизатор" как вы понимаете также на C++ Builder 6 и единственная идея, которая возникла в силу начальных знаний по с++, это механически объединить листингов от двух программ.

НО НО Но мне слабо переписать код Delphi 7 на C++ Builder 6 хотя и Delphi крепкий орешик.
Во "временном синхронизаторе" nist_12_06_2009_00.zip там замутили ацкий код работы с сетью интернетом, как по протоколу TCP, так - UDP и куча ссылок на американские сайты синхронизации времени (может и наши есть? (синхросайты)). И причем срабатывает только 2-е ссылки по протоколу UDP))).
Так что говорить о понимании исходника не приходится)), а о понимании с++ воощЩе((((
(Если вы решили ответить, то конечно же это будет определенный рецепт.
Но столь специфичную задачу можно встретить только случайно или специалисту в этой области случайно зайти на этот форум. Поэтому просто жду ваших ссылок на ресурс с подобной реализацией для развития этой темы! Благодарю за внимание.)
Не вопрос по прежнему - вопрос темы!!!)

Последний раз редактировалось trwrt; 11.04.2011 в 07:58.
trwrt вне форума Ответить с цитированием
Старый 11.04.2011, 07:30   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Все компоненты С++ Builder 6, написаны на Delphi. Так, что дельфиний код он понимает. Подключить модули можно, но я сам никогда этого не делал.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 11.04.2011, 07:59   #4
trwrt
Новичок
Джуниор
 
Регистрация: 10.04.2011
Сообщений: 6
По умолчанию

Это не помогло!! Может и есть "синхросайты" наши и/или/т.е. напишите ссылку на ресурс с подобной реализацией вашей или найденной.
trwrt вне форума Ответить с цитированием
Старый 11.04.2011, 12:43   #5
trwrt
Новичок
Джуниор
 
Регистрация: 10.04.2011
Сообщений: 6
По умолчанию Re: Как переделать исходники из Delphi 7 в C++ Builder 6 ?

Код:
{$o-}
unit Unit_udp;
interface
uses  Windows, Messages,  SysUtils,   Forms, StdCtrls, ExtCtrls, Classes,  Controls;
type
  TForm1 = class(TForm)
    Button_send_udp: TButton;
    ListBox1: TListBox;
    ComboBox1: TComboBox;
    CheckBox_set_time: TCheckBox;
    Timer1: TTimer;
    Button_tcp: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button_send_udpClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormResize(Sender: TObject);
    Procedure Timer1Timer(Sender: TObject);
    procedure Button_tcpClick(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure CheckBox_set_timeClick(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
  private
  public
    procedure echo(S:String;I:Integer);
    procedure echo_str(S:String);
    procedure msg( var M:TMessage); message WM_USER+1;
    procedure error(SS:string);
    procedure close_socket;
  end;
var  Form1: TForm1;
implementation  {$R *.DFM}
uses  Winsock;
const WSA_ASYNC = WM_USER+1;
      WS_VERSION_REQD = 257;
//      BASE1900 = 9435484800;
//      DayOfWeek: array[0..6] of string[3] = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
var Sock : TSocket;
    Remote : TSockAddr;// sockaddr_in;
    WD : TWSAData;
    nRet : integer;
    packet:char;
    buf: array[1..16] of byte;
    size: Integer;
    FileTime:TFileTime;
    res:integer;
procedure TForm1.error(SS:string);
begin
  ListBox1.Items.Add(SS+IntToStr(WSAGetLastError) );
  closesocket(Sock);
  WSACleanup;
end;
procedure TForm1.echo(S:String;I:Integer);
begin
  ListBox1.Items.Add(S+'   '+IntToStr(I));
end;
procedure TForm1.echo_str(S:String);
begin
  ListBox1.Items.Add(S);
end;
function FileTime2DateTime (FileTime: TFileTime): TDateTime;
var
  LocalFileTime: TFileTime;
  SystemTime: TSystemTime;
begin
  FileTimeToLocalFileTime(FileTime, LocalFileTime) ;
  FileTimeToSystemTime(LocalFileTime, SystemTime) ;
//  Form1.echo_str( FormatDateTime('dd mmmm yyyy hh:mm:ss', SystemTimeToDateTime(SystemTime)) );
  Result := SystemTimeToDateTime(SystemTime) ;
    FileTimeToSystemTime(FileTime, SystemTime) ;
  if Form1.CheckBox_set_time.Checked then
    begin
      SetSystemTime(SystemTime);
      Form1.CheckBox_set_time.Checked:=false;
    end;
end;
 
procedure multiply(var w:array of byte; u,v:array of byte;m,n:integer);
var    k, t:  integer; i, j:cardinal;
begin
  for i:=0 to 9 {m*n-1} do w[i]:=0;
   for j := 0 to n-1 do
   begin
      k := 0;
      for i := 0 to m-1 do
      begin
         t :=  u[i]*v[j] + w[i+j] + k;
         w[i+j] := byte( t );
         k :=  t shr 8;
      end;
      w[j+m] :=byte( k );
   end;
end;
procedure add_base_1900(var w:array of byte; u:array of byte;  n:integer);
var v: array [0..4] of byte;
t,k:word;     i:integer;          // BASE1900 02 32 66 12 80 =$0232661280=9435484800
begin
  v[0]:=$80; v[1]:=$12; v[2]:=$66; v[3]:=$32; v[4]:=$02;
  for i:=0 to 9 do w[i]:=0;
      k := 0;
      for i := 0 to n do
      begin
        if (i>4) and (k=0) then break;
        if i<5 then  t := ( u[i]+v[i] + {w[i] +} k ) else t := ( u[i] + {w[i] +} k );
         w[i]:= byte( t );
         k :=  t shr 8;
      end;
end;
trwrt вне форума Ответить с цитированием
Старый 11.04.2011, 12:46   #6
trwrt
Новичок
Джуниор
 
Регистрация: 10.04.2011
Сообщений: 6
По умолчанию

Код:
procedure TForm1.msg( var M:TMessage);
var i:integer;     P:Pbyte;
ww,uu,vv,aa: array[0..9] of byte;
begin
  IF M.LParam=FD_READ THEN
    BEGIN
      size :=sizeof(Remote);
      nRet := recvfrom (Sock, Buf, 16, 0,  Remote, size );
      echo('Receive ', nRet);
    //  for i := 1 to 4 do echo(' '+inttostr(Buf[i]),0);
      for i:=0 to 9 do begin ww[i]:=0; uu[i]:=0;end;
      uu[0]:=Buf[4]; uu[1]:=Buf[3];   uu[2]:=Buf[2]; uu[3]:=Buf[1];
      vv[0]:=$80;    vv[1]:=$96;      vv[2]:=$98;    vv[3]:=$00;      //98 96 80
      add_base_1900(aa,uu,5);
      multiply(ww,aa,vv,5,4);
      P:=@FileTime.dwHighDateTime;
      P^:=ww[4];INC(P);  P^:=ww[5];INC(P);  P^:=ww[6];INC(P);  P^:=ww[7];
  //  P^:=$BB;INC(P);  P^:=$DB;INC(P);  P^:=$C9;INC(P);  P^:=$01;    //HI  01 C9 DB BB
      P:=@FileTime.dwLowDateTime;
      P^:=ww[0];INC(P);  P^:=ww[1];INC(P);  P^:=ww[2];INC(P);  P^:=ww[3];
  //      P^:=$80;INC(P);  P^:=$D9;INC(P);  P^:=$63;INC(P);  P^:=$DF;       //LO  DF 63 D9 80
  //    echo_str(DateToStr( FileTime2DateTime(FileTime)) +'  '+ TimeToStr( FileTime2DateTime(FileTime)));
      echo_str( FormatDateTime('dd mmmm yyyy hh:mm:ss', FileTime2DateTime(FileTime)) +' - Remote computer');
      echo_str( FormatDateTime('dd mmmm yyyy hh:mm:ss', now) + ' - Local computer');
  END
   ELSE
    BEGIN
      i:=WSAGetLastError;
      echo('Error: ',i);
    END;
  nRet := closesocket(Sock);
  echo('Close ', nRet);
 
  Button_send_udp.Enabled:=true;
  Button_tcp.Enabled:=true;
  if Button_send_udp.Tag=1  then
  begin
    Button_send_udp.SetFocus;
  end
    else
  if Button_tcp.Tag=1 then
  begin
    Button_tcp.SetFocus;
  end;
  Button_send_udp.Tag:=0;
  Button_tcp.Tag:=0;
  WSACleanup;
  Timer1.Enabled:=false;
end;
procedure TForm1.FormCreate(Sender: TObject);
var i,k:integer;   S:String;        del:boolean;
const A:array[1..4] of string = ('.com','.gov','.net','.edu');
begin
  Caption:='NIST Time';
  try
   ComboBox1.Items.LoadFromFile(ExtractFilePath(ParamStr(0))+'nist-srv.lst');
  except
   ComboBox1.Items.add('time-a.nist.gov');
   ListBox1.Items.Add('Error: Can''t find file nist-srv.lst');
  end;
  i:=ComboBox1.Items.Count;
  while i>=0 do
  begin
    S:=ComboBox1.Items.Strings[i] ;
    del:=true;
    for k:=1 to 4 do
    begin
      if pos(A[k],LowerCase(S))>0 then
       begin
         ComboBox1.Items.Strings[i]:=copy(ComboBox1.Items.Strings[i],1,pos(A[k],LowerCase(S))+3);
         if pos('://',ComboBox1.Items.Strings[i])>0 then 
ComboBox1.Items.Strings[i]:=copy(ComboBox1.Items.Strings[i],pos('://',LowerCase(S))+3,
length(ComboBox1.Items.Strings[i])-3);
         del:=false;
       end;
    end;
    if del then ComboBox1.Items.delete(i);
    i:=i-1;
  end;
  if ComboBox1.Items.Count>12 then  ComboBox1.ItemIndex:=13 else ComboBox1.ItemIndex:=ComboBox1.Items.Count-1;
  // Caption:=IntToStr(ComboBox1.Items.Count);
//   ComboBox1.Items.SaveToFile('TTTTTTTtt.txt');
//  res:=WSAStartup({02}WS_VERSION_REQD,WD);
//  echo('Start ',res);
 
//  uu[0]:=$E8; uu[1]:=$FD;   uu[2]:=$CD; uu[3]:=$CD;  uu[4]:=0; uu[5]:=0;  //$CDCDFDE8
//  vv[0]:=$18; vv[1]:=$F6;   vv[2]:=$00; vv[3]:=$FA;
  //  for i:=0 to 9 do ww[i]:=0;
  //multiply(ww,uu,vv,3,3);
    // BASE1900 02 32 66 12 80 =$0232661280=9435484800
//  add_base1900(ww,uu,4);
  //$CDCDFDE8+$0232661280  = $ 03 00 34 10 68
  //echo(IntToHex(ww[0],2)+' '+IntToHex(ww[1],2)+' '+IntToHex(ww[2],2)+' '+IntToHex(ww[3],2)+' '+IntToHex(ww[4],2),0)
//   Button_close.Enabled:=false;
end;
trwrt вне форума Ответить с цитированием
Старый 11.04.2011, 12:46   #7
trwrt
Новичок
Джуниор
 
Регистрация: 10.04.2011
Сообщений: 6
По умолчанию Re: Как переделать исходники из Delphi 7 в C++ Builder 6 ?

продолжение 2

Код:
procedure TForm1.Button_send_udpClick(Sender: TObject);
var IP:String;       Host : PHostEnt;
begin
  Button_send_udp.Tag:=1;
  Timer1.Enabled:=true;
  res:=WSAStartup({02}WS_VERSION_REQD,WD);
  echo('Start ',res);
  if res<>0 then
  begin
    ListBox1.Items.Add('Winsock is not responding. Error: '+IntToStr(WSAGetLastError) );
    WSACleanup;
    exit;
  end;
  Button_send_udp.Enabled:=false;
  Button_tcp.Enabled:=false;
  ListBox1.Clear;
  Sock:=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP{0});
  echo('Socket ',Sock);
  if Sock < 0 then     begin     error('Socket error: ');    exit;   end;
  nRet := WSAAsyncSelect(Sock, Handle, WSA_ASYNC, FD_READ);
  echo('Select ', nRet);
  if nRet=SOCKET_ERROR then    begin     error('Select error: ');    exit;   end;
  Remote.sin_family:=PF_INET;
  Remote.sin_port:=ntohs(IPPORT_TIMESERVER);  //37 port  OR it may be 137 port
  Remote.sin_addr.s_addr := INADDR_ANY;
  nRet := bind(Sock,  Remote, sizeof(Remote));
  echo('Bind ',nRet);
  if nRet=SOCKET_ERROR then    begin     error('Bind error: ');    exit;   end;
  try
    Host:=GetHostByName(PChar(ComboBox1.Items[ComboBox1.ItemIndex]));
    if Host <> nil then IP:=inet_ntoa(PInAddr(Host.h_addr_list^)^);
  except
    error('IP resolve error: ');
    exit;
  end;
  Remote.sin_addr.S_addr:=inet_addr(PChar(IP));
  echo_str('Time Server: '+ComboBox1.Items[ComboBox1.ItemIndex]);
  echo_str('IP: '+IP);
  if IP='' then   begin     error('IP resolve error: ');    exit;   end;
  Remote.sin_family := PF_INET;
  Remote.sin_port   := htons (IPPORT_TIMESERVER);
  packet:=' ';
  nRet := sendto(Sock, packet, 1, 0,  Remote ,  sizeof(Remote));
  echo('Send ', nRet);
  if nRet=SOCKET_ERROR then    begin     error('Send error: ');    exit;   end;
end;
procedure TForm1.close_socket;
begin
  nRet := closesocket(Sock);
  echo('Close ', nRet);
  Button_send_udp.Enabled:=true;
  Button_tcp.Enabled:=true;
  Button_send_udp.Tag:=0;
  Button_tcp.Tag:=0;
//  Button_send_udp.SetFocus;
  WSACleanup;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  WSACleanup;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
  ListBox1.Height:=Height-75;
  ComboBox1.Left:=Width-15-ComboBox1.Width;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled:=false;
  close_socket;
end;
procedure TForm1.Button_tcpClick(Sender: TObject);
var IP:String;       Host : PHostEnt;
begin
  Button_tcp.Tag:=1;
  Timer1.Enabled:=true;
  res:=WSAStartup(WS_VERSION_REQD,WD);
  echo('Start ',res);
  if res<>0 then
  begin
    ListBox1.Items.Add('Winsock is not responding. Error: '+IntToStr(WSAGetLastError) );
    WSACleanup;
    exit;
  end;
  Button_tcp.Enabled:=false;
  Button_send_udp.Enabled:=false;
  ListBox1.Clear;
  Sock:=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  echo('Socket ',Sock);
  if Sock < 0 then     begin     error('Socket error: ');    exit;   end;
  nRet := WSAAsyncSelect(Sock, Handle, WSA_ASYNC, FD_READ);
  echo('Select ', nRet);
  if nRet=SOCKET_ERROR then    begin     error('Select error: ');    exit;   end;
  try
    Host:=GetHostByName(PChar(ComboBox1.Items[ComboBox1.ItemIndex]));
    if Host <> nil then IP:=inet_ntoa(PInAddr(Host.h_addr_list^)^);
  except
    error('IP resolve error: ');
    exit;
  end;
  Remote.sin_family:=PF_INET;
  Remote.sin_port:=ntohs(IPPORT_TIMESERVER);
  Remote.sin_addr.S_addr:=inet_addr(PChar(IP));
  echo_str('Time Server: '+ComboBox1.Items[ComboBox1.ItemIndex]);
  echo_str('IP: '+IP);
  if IP='' then   begin     error('IP resolve error: ');    exit;   end;
  nRet:=connect(Sock,Remote,SizeOf(Remote));
//  nRet := sendto(Sock, packet, 1, 0,  Remote ,  sizeof(Remote));
  echo('Connect ', nRet);
// //// if nRet=SOCKET_ERROR then    begin     error('Connect error: ');    exit;   end;  
//  if  SOCKET_ERROR -->  WSAGetLastError = 10035  (WSAEWOULDBLOCK) - it's OK  for
// WSAEWOULDBLOCK to be reported as the result from calling connect on a nonblocking 
//SOCK_STREAM socket, since some time must elapse for the connection to be established.
  exit;
  Remote.sin_family := PF_INET;
  Remote.sin_port   := htons (IPPORT_TIMESERVER);
  packet:=' ';
  nRet := sendto(Sock, packet, 1, 0,  Remote ,  sizeof(Remote));
  echo('Send ', nRet);
  if nRet=SOCKET_ERROR then    begin     error('Send error: ');    exit;   
end;  
end;
trwrt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CodeGear C++ Builder 2007 Lite не может откомпилировать исходники C++ Builder 6 Ecosasha C++ Builder 2 22.11.2013 15:02
Как установить delphi вместе с builder? Сергей089 Помощь студентам 9 21.02.2010 10:25
Помогите,как переделать текст проги Borland С++ Builder под Microsoft visual C++ 6.0 retpecub Visual C++ 9 15.06.2009 12:17
Нужно переделать код с Delphi на C++ Builder POPOV Помощь студентам 2 12.11.2007 22:51
Как вставить панельку с кнопочками в редактор Delphi/Builder/Visual C++? Brother Win Api 1 02.10.2007 13:35