Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 от Delphi к CPP  [new]
patrick1968
Member

Откуда:
Сообщений: 500
Добрый день.

Возникла тут у меня необходимость перевести одну программу с Делфи на Си, так не сложная но тем не менее. Си практически не знаю, так на допотопном уровне, естественно прошу помощи.
есть фрагмент Делфи

uses IniFiles;
...
var PSIni : TInifile;
...
   PSIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'PNG.ini');


Как это будет выглядеть на Си. Сорри за банальность. Спасибо.

Сообщение было отредактировано: 10 мар 21, 18:53
2 мар 21, 17:09    [22288523]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1966
patrick1968
Добрый день.

Возникла тут у меня необходимость перевести одну программу с Делфи на Си, так не сложная но тем не менее. Си практически не знаю, так на допотопном уровне, естественно прошу помощи.
есть фрагмент Делфи


uses IniFiles;
...
var PSIni : TInifile;
...
PSIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'PNG.ini');

Как это будет выглядеть на Си. Сорри за банальность. Спасибо.

Это смотря для чего тебе нужен TIniFile.
Например, запись строки данных в .ini фал может выглядеть так:
#include <Windows.h>
#include <filesystem>
#include <iostream>
using namespace std;

int wmain(int argc, wchar_t * argv[])
{
    filesystem::path curr = filesystem::path(argv[0]).remove_filename().append(L"PNG.ini");

    wchar_t division [] = L"Мясные изделия";
    wchar_t type     [] = L"Колбаса";
    wchar_t name     [] = L"Брауншвейгская";

    wcout << L"Lines written: " << WritePrivateProfileStringW(division, type,  name, curr.c_str()) << endl;


К сообщению приложен файл. Размер - 37Kb
2 мар 21, 18:36    [22288576]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
Siemargl
Member

Откуда: 010100
Сообщений: 6422
patrick1968
Добрый день.

Возникла тут у меня необходимость перевести одну программу с Делфи на Си, так не сложная но тем не менее. Си практически не знаю, так на допотопном уровне, естественно прошу помощи.
есть фрагмент Делфи


uses IniFiles;
...
var PSIni : TInifile;
...
PSIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'PNG.ini');

Как это будет выглядеть на Си. Сорри за банальность. Спасибо.

Используй C++ Builder, там такое же API.

Иначе устанешь переписывать.
2 мар 21, 19:26    [22288620]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
patrick1968
Member

Откуда:
Сообщений: 500
Я в принципе так и делаю. Спасибо.
2 мар 21, 22:50    [22288705]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
ну я
Member

Откуда: Москва
Сообщений: 1255
patrick1968
Добрый день.

Возникла тут у меня необходимость перевести одну программу с Делфи на Си, так не сложная но тем не менее. Си практически не знаю, так на допотопном уровне, естественно прошу помощи.
есть фрагмент Делфи


uses IniFiles;
...
var PSIni : TInifile;
...
PSIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'PNG.ini');

Как это будет выглядеть на Си. Сорри за банальность. Спасибо.


#include "IniFiles.hpp"
TIniFile* PSIni;
PSIni = new TIniFile(ExtractFilePath(ParamStr(0)) + "PNG.ini");


Сообщение было отредактировано: 10 мар 21, 18:54
9 мар 21, 17:45    [22291905]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34688
patrick1968
Добрый день.

Возникла тут у меня необходимость перевести одну программу с Делфи на Си, так не сложная но тем не менее. Си практически не знаю, так на допотопном уровне, естественно прошу помощи.
есть фрагмент Делфи
Как это будет выглядеть на Си. Сорри за банальность. Спасибо.



#include "IniFiles.h"
//...
TInifile* PSIni;
//...
   PSIni = new TIniFile(ExtractFilePath(ParamStr(0)) + "PNG.ini");


уверен, тебе стало легче...
10 мар 21, 09:58    [22292107]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34688
ну я
patrick1968
Добрый день.

Возникла тут у меня необходимость перевести одну программу с Делфи на Си, так не сложная но тем не менее. Си практически не знаю, так на допотопном уровне, естественно прошу помощи.
есть фрагмент Делфи


uses IniFiles;
...
var PSIni : TInifile;
...
PSIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'PNG.ini');

Как это будет выглядеть на Си. Сорри за банальность. Спасибо.


#include "IniFiles.hpp"
TIniFile* PSIni;
PSIni = new TIniFile(ExtractFilePath(ParamStr(0)) + "PNG.ini");


Блин, я опоздал ):
10 мар 21, 09:59    [22292108]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

MasterZiv
Блин, я опоздал ):

Но в этот раз намного меньше чем обычно. Прогресс.

Posted via ActualForum NNTP Server 1.5

10 мар 21, 13:34    [22292350]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
Siemargl
Member

Откуда: 010100
Сообщений: 6422
MasterZiv
ну я
пропущено...


#include "IniFiles.hpp"
TIniFile* PSIni;
PSIni = new TIniFile(ExtractFilePath(ParamStr(0)) + "PNG.ini");


Блин, я опоздал ):

+



Кстати, Билдер дотянули до С++17, прогресс

Сообщение было отредактировано: 10 мар 21, 18:54
10 мар 21, 13:45    [22292361]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

Просто в качестве компилятора взяли clang.

Posted via ActualForum NNTP Server 1.5

10 мар 21, 13:47    [22292364]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
Siemargl
Member

Откуда: 010100
Сообщений: 6422
Dimitry Sibiryakov

Просто в качестве компилятора взяли clang.

Не просто взяли, там же фирменные расширения были. Допиленный он там.

Правда, был очень отстающим по версии, что то вроде clang 3.4 в Берлине. Upd 5.0 в Сиднее

Сообщение было отредактировано: 10 мар 21, 13:52
10 мар 21, 13:52    [22292369]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
patrick1968
Member

Откуда:
Сообщений: 500
Продолжаю перенос проги на С Buider из Delphi и естественно "уперся" прошу помощи, итак

есть у меня в Делфи структура
  TInfo = record
      TypeID : integer;
      Name : string;
      Article : string;
      Mark : string;
      MinMeas : single;
      MaxMeas : single;
      PC20  : single;
      PC60  : single;
      PC100 : single;
      Delta : single;
    end;


есть еще следующий класс, соответственно конструктор и функция для чтения
 TInfoObj = class(TObject)
  private
    sStr : TInfo;
    function GetValue : TInfo;
  public
    constructor Create( TypeID : integer;
                        Name : string;
                        Article : string;
                        Mark : string;
                        MinMeas : single;
                        MaxMeas : single;
                        PC20  : single;
                        PC60  : single;
                        PC100 : single;
                        Delta : single );
    property pValue : TInfo read GetValue;
  end;
...
implementation

{$R *.dfm}

uses DataModule, Confirm, TypeDevice, DBView, TypeStand;

constructor TInfoObj.Create( TypeID : integer; Name : string; Article : string; Mark : string; MinMeas : single; MaxMeas : single; PC20  : single; PC60  : single; PC100 : single; Delta : single);
 begin
    inherited Create;
    sStr.TypeID := TypeID;
    sStr.Name := Name;
    sStr.Article := Article;
    sStr.Mark := Mark;
    sStr.MinMeas := MinMeas;
    sStr.MaxMeas := MaxMeas;
    sStr.PC20 := PC20;
    sStr.PC60 := PC60;
    sStr.PC100 := PC100;
    sStr.Delta := Delta;
 end;

function TInfoObj.GetValue : TInfo;
 begin
  Result := sStr;
 end;


далее в программе я из запроса, данные записываю а объекты строк Комбобокса,

  if MainDataModule.qTypeDevice.Active then MainDataModule.qTypeDevice.Close;
  MainDataModule.qTypeDevice.Prepared := true;
  MainDataModule.qTypeDevice.Parameters.ParamByName('@Option').Value := 0;
  MainDataModule.qTypeDevice.Open;
  cbTypeDevice.Items.Clear;

  while not MainDataModule.qTypeDevice.Eof do begin
    With MainDataModule.qTypeDevice do begin
       vInfo := TInfoObj.Create(FieldByName('TypeID').AsInteger,
                                FieldByName('Name').AsString,
                                FieldByName('Article').AsString,
                                FieldByName('Mark').AsString,
                                FieldByName('MinMeas').AsFloat,
                                FieldByName('MaxMeas').AsFloat,
                                FieldByName('PC20').AsFloat,
                                FieldByName('PC60').AsFloat,
                                FieldByName('PC100').AsFloat,
                                FieldByName('Delta').AsFloat);
       cbTypeDevice.Items.AddObject(FieldByName('Name').AsString + ' ' + FieldByName('Article').AsString, vInfo);
    end;
    MainDataModule.qTypeDevice.Next;
  end;
  MainDataModule.qTypeDevice.Close;


ну и потом где надо я их читаю
Info := TInfoObj(cbTypeDevice.Items.Objects[cbTypeDevice.ItemIndex]);


как весь этот процесс организовать в C Builder, структуру створил
   struct _TypeDevice {
	   int TypeID;
	   AnsiString Name;
	   AnsiString Article;
	   AnsiString Mark;
	   double MinMeas;
	   double MaxMeas;
	   double PC20;
	   double PC60;
	   double PC100;
	   double Delta;
       } TypeDevice;

наверное правильно, а вот дальше, конструкторы и прочее? никак. Заранее сильно благодарен
10 мар 21, 17:55    [22292597]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
patrick1968,
Один в один и пиши. Вверху строка дельфи а внизу сишная. Языки очень похожи. Это не пыха))
Конструктор сишный забыл?
10 мар 21, 18:02    [22292603]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
petrav
Member

Откуда:
Сообщений: 2861
Страуструп "Язык программирования C++". ~1100 страниц.

10-ть страниц утром, 10-ть страниц вечером. Задания выполнять не надо, но нужно
подумать как бы ты их делал.
10 мар 21, 19:14    [22292644]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
miksoft
Member

Откуда:
Сообщений: 38773
patrick1968
Продолжаю перенос проги на С Buider из Delphi
А зачем? C++Builder понимает код Delphi сам.
10 мар 21, 19:21    [22292647]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
Siemargl
Member

Откуда: 010100
Сообщений: 6422
patrick1968
Dimitry Sibiryakov

пропущено...

Что, совсем не можешь догадаться заменить "begin"/"end" на "{"/"}" и ":=" на "="? Может,
ну его нафиг, программирование это?..


Я вижу юмор зашкаливает, иль ты считаешь людей за дебилов. Если бы было так просто, то обращения в форум не было. пробуй в своих прогах менять присвоить на равно и наоборот, наверно у тебя все проги такого уровня, а то хамить все мастера

Модератор: Удалено


Но какой либо базовый учебник по С++ 2003, без подробностей, придется прочитать. Там делов на денёк, если не лезть в новые стандарты (с++11 и новее).

Сообщение было отредактировано: 10 мар 21, 23:36
10 мар 21, 22:35    [22292724]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921
Модератор: Друзья. Снижаем градус напряжения.


patrick1968
Если бы было так просто, то обращения в форум не было.

Но... это и в самом деле так просто. Что именно у тебя не получилось?

Siemargl
Там делов на денёк

Откуда там "денёк", если всё реально делается тупым подстрочным переводом конструкций. Я бы понял если бы там задействовались возможности, отсутствующие в С++, типа создания объекта заранее неизвестного класса и всё такое, но код же переводится 1-в-1.

Сообщение было отредактировано: 10 мар 21, 23:36
10 мар 21, 23:12    [22292743]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
petrav
Member

Откуда:
Сообщений: 2861
Dimitry Sibiryakov

Откуда там "денёк", если всё реально делается тупым подстрочным переводом конструкций. Я бы понял если бы там задействовались возможности, отсутствующие в С++, типа создания объекта заранее неизвестного класса и всё такое, но код же переводится 1-в-1.

Очевидно же что тупой заменой begin/end -> {} и := -> = там мало чего можно добиться.

Например, ключевое слово `with`. Я о нём регулярно вспоминаю, только не помню что я вспоминаю: Паскаль или C#. :)

  while not MainDataModule.qTypeDevice.Eof do begin
    With MainDataModule.qTypeDevice do begin
11 мар 21, 00:27    [22292770]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

petrav
Например, ключевое слово `with`.

А что с ним? Берётся текст вплоть до do, куть здеся - пасть всюду до самого end.

Posted via ActualForum NNTP Server 1.5

11 мар 21, 01:19    [22292775]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
petrav
Member

Откуда:
Сообщений: 2861
Dimitry Sibiryakov

petrav
Например, ключевое слово `with`.

А что с ним? Берётся текст вплоть до do, куть здеся - пасть всюду до самого end.

Так это же знать нужно. Там в паскалевском коде ещё куча приколов. Вызов методов без
кавычек (что-то бейсик вспомнился), кавычки одинарные на двойные заменить. Короче,
знать нужно обое два языка. Простой заменой не обойдёшься.

Только книга!
11 мар 21, 01:30    [22292779]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
petrav
Member

Откуда:
Сообщений: 2861
Вызов методов без скобок, в смысле.
11 мар 21, 01:34    [22292780]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
Пётр Седов
Member

Откуда: Санкт-Петербург
Сообщений: 700
patrick1968
   struct _TypeDevice {
	...
       } TypeDevice;
Надо так:
struct TypeDevice {
  ...
};
Delphi-ийский тип single соответствует C++-ному типу float (размер 4 байта).

Оборачивать структуру TypeDevice в класс, производный от класса TObject, необязательно. Перепишите Delphi-код без with, в C++ аналога нет. Потом всё просто. В цикле:
// создаём экземпляр структуры TypeDevice
TypeDevice* info = new TypeDevice;
// достаём поля
info->TypeID = FieldByName("TypeID")->AsInteger;
...

// добавляем info в combo box
cbTypeDevice->Items->AddObject(FieldByName("Name")->AsString + " " + FieldByName("Article")->AsString, reinterpret_cast<TObject*>(info));

Потом, чтобы достать info из combo box-а:
TypeDevice* info = reinterpret_cast<TypeDevice*>(cbTypeDevice->Items->Objects[cbTypeDevice->ItemIndex]);

Потом, по-хорошему, перед уничтожением combo box-а, надо пройтись в цикле, и уничтожить все созданные экземпляры структуры TypeDevice:
for (int i = 0; i < cbTypeDevice->Items->Count; i++) {
  TypeDevice* info = reinterpret_cast<TypeDevice*>(cbTypeDevice->Items->Objects[i]);
  delete info;
}
Можно это не делать, но тогда будет утечка памяти.
11 мар 21, 01:50    [22292781]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
petrav
Вызов методов без скобок, в смысле.
угу. Он не дописал - "тупой заменой скобок () на пусто. Никто никогда не был против книг. Не знаю что вы спорит 3 поста.
11 мар 21, 07:06    [22292801]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
patrick1968
Member

Откуда:
Сообщений: 500
Добрый день. Петру Седову огромное спасибо. Вот это реальная помощь и ничего лишнего. Большой респект!!!
14 мар 21, 14:24    [22294256]     Ответить | Цитировать Сообщить модератору
 Re: от Delphi к CPP  [new]
patrick1968
Member

Откуда:
Сообщений: 500
Добрый день. Знатоки подскажите плиз, где RAD STUDIO содержит Temp файлы, а то у меня рабочий проект вдруг свалился в "Error detected (LME288) Unable to perform link", на форумах погуглил - рекомендуют темп вычистить и проект пересобрать
16 мар 21, 18:53    [22295736]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / C++ Ответить