powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / от Delphi к CPP
25 сообщений из 93, страница 1 из 4
от Delphi к CPP
    #40049933
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

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

Код: pascal
1.
2.
3.
4.
5.
uses IniFiles;
...
var PSIni : TInifile;
...
   PSIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'PNG.ini');



Как это будет выглядеть на Си. Сорри за банальность. Спасибо.
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40049964
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
patrick1968
Добрый день.

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


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

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

Это смотря для чего тебе нужен TIniFile.
Например, запись строки данных в .ini фал может выглядеть так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
#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;
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40049994
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968
Добрый день.

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


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

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

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

Иначе устанешь переписывать.
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40050052
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в принципе так и делаю. Спасибо.
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052033
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968
Добрый день.

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


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

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


Код: plaintext
1.
2.
3.
#include "IniFiles.hpp"
TIniFile* PSIni;
PSIni = new TIniFile(ExtractFilePath(ParamStr(0)) + "PNG.ini");
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052167
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968
Добрый день.

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



Код: plaintext
1.
2.
3.
4.
5.
#include "IniFiles.h"
//...
TInifile* PSIni;
//...
   PSIni = new TIniFile(ExtractFilePath(ParamStr(0)) + "PNG.ini");



уверен, тебе стало легче...
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052168
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я
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");


Блин, я опоздал ):
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052282
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivБлин, я опоздал ):

Но в этот раз намного меньше чем обычно. Прогресс.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052291
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
ну я
пропущено...


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


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

[spoiler]
YouTube Video
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052293
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто в качестве компилятора взяли clang.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052297
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

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

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

Правда, был очень отстающим по версии, что то вроде clang 3.4 в Берлине. Upd 5.0 в Сиднее
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052408
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжаю перенос проги на С Buider из Delphi и естественно "уперся" прошу помощи, итак

есть у меня в Делфи структура
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  TInfo = record
      TypeID : integer;
      Name : string;
      Article : string;
      Mark : string;
      MinMeas : single;
      MaxMeas : single;
      PC20  : single;
      PC60  : single;
      PC100 : single;
      Delta : single;
    end;



есть еще следующий класс, соответственно конструктор и функция для чтения
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
 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;



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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
  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;



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



как весь этот процесс организовать в C Builder, структуру створил
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
   struct _TypeDevice {
	   int TypeID;
	   AnsiString Name;
	   AnsiString Article;
	   AnsiString Mark;
	   double MinMeas;
	   double MaxMeas;
	   double PC20;
	   double PC60;
	   double PC100;
	   double Delta;
       } TypeDevice;


наверное правильно, а вот дальше, конструкторы и прочее? никак. Заранее сильно благодарен
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052411
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968,
Один в один и пиши. Вверху строка дельфи а внизу сишная. Языки очень похожи. Это не пыха))
Конструктор сишный забыл?
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052429
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страуструп "Язык программирования C++". ~1100 страниц.

10-ть страниц утром, 10-ть страниц вечером. Задания выполнять не надо, но нужно
подумать как бы ты их делал.
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052431
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968
Продолжаю перенос проги на С Buider из Delphi
А зачем? C++Builder понимает код Delphi сам.
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052465
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968
Dimitry Sibiryakov

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

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


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

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

Но какой либо базовый учебник по С++ 2003, без подробностей, придется прочитать. Там делов на денёк, если не лезть в новые стандарты (с++11 и новее).
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052471
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Друзья. Снижаем градус напряжения.

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

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

SiemarglТам делов на денёк
Откуда там "денёк", если всё реально делается тупым подстрочным переводом конструкций. Я бы понял если бы там задействовались возможности, отсутствующие в С++, типа создания объекта заранее неизвестного класса и всё такое, но код же переводится 1-в-1.
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052487
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

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

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

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

Код: pascal
1.
2.
  while not MainDataModule.qTypeDevice.Eof do begin
    With MainDataModule.qTypeDevice do begin
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052489
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravНапример, ключевое слово `with`.

А что с ним? Берётся текст вплоть до do, куть здеся - пасть всюду до самого end.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052492
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

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

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

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

Только книга!
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052493
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вызов методов без скобок, в смысле.
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052494
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968
Код: plaintext
1.
2.
3.
   struct _TypeDevice {
	...
       } TypeDevice;

Надо так:
Код: plaintext
1.
2.
3.
struct TypeDevice {
  ...
};

Delphi-ийский тип single соответствует C++-ному типу float (размер 4 байта).

Оборачивать структуру TypeDevice в класс, производный от класса TObject, необязательно. Перепишите Delphi-код без with, в C++ аналога нет. Потом всё просто. В цикле:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
// создаём экземпляр структуры 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-а:
Код: plaintext
1.
TypeDevice* info = reinterpret_cast<TypeDevice*>(cbTypeDevice->Items->Objects[cbTypeDevice->ItemIndex]);


Потом, по-хорошему, перед уничтожением combo box-а, надо пройтись в цикле, и уничтожить все созданные экземпляры структуры TypeDevice:
Код: plaintext
1.
2.
3.
4.
for (int i = 0; i < cbTypeDevice->Items->Count; i++) {
  TypeDevice* info = reinterpret_cast<TypeDevice*>(cbTypeDevice->Items->Objects[i]);
  delete info;
}

Можно это не делать, но тогда будет утечка памяти.
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40052513
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Вызов методов без скобок, в смысле.
угу. Он не дописал - "тупой заменой скобок () на пусто. Никто никогда не был против книг. Не знаю что вы спорит 3 поста.
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40053298
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Петру Седову огромное спасибо. Вот это реальная помощь и ничего лишнего. Большой респект!!!
...
Рейтинг: 0 / 0
от Delphi к CPP
    #40054264
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Знатоки подскажите плиз, где RAD STUDIO содержит Temp файлы, а то у меня рабочий проект вдруг свалился в "Error detected (LME288) Unable to perform link", на форумах погуглил - рекомендуют темп вычистить и проект пересобрать
...
Рейтинг: 0 / 0
25 сообщений из 93, страница 1 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / от Delphi к CPP
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]