powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сопоставление Delphi и C++
25 сообщений из 34, страница 1 из 2
Сопоставление Delphi и C++
    #39649917
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Сразу прошу прощения за видимо наивный вопрос (с этим никогда не сталкивался) пишу проект на делфи и есть у меня один модуль на С++ и его надо преобразовать в дельфийский, С++ знаю весьма удаленно

есть там процедура

Код: plaintext
1.
2.
3.
4.
5.
void *ModelCreate(int Nn,
                                 UCHAR Type,
                                 DATA_HANDLER DataHandler,
                                 void *PCon,
                                struct SpecialParametrs *PSpecialParametrs);


по первым 2 параметрам всё ясно, насколько я понимаю 3-й указатель на функцию (возвращает integer), 4 - указатель на переменную и 5 - указатель на структуру

Вот вопрос, как это будет выглядеть на делфи, особенно непонятен 3 параметр. Заранее спасибо
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39649918
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968Вот вопрос, как это будет выглядеть на делфи, особенно непонятен 3 параметр.

Третий параметр - надо смотреть как объявлено DATA_HANDLER.
Четвёртый параметр - Pointer.
Пятый параметр - ^SpecialParameters.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39649922
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968,

Псевдокод:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Type
  TMyIntFunction=function : integer;

Procedure DoSome(..., Handler:TMyIntFunction,....);
var I:integer;
begin

  if Assigned(Handler) then I:=Handler;

end;
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39649923
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

Тьфу ты... Невнимательно прочел, подумал, что тебе функцию как параметр нужно передать.
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39649949
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
int __stdcall DataHandler(int Type,void *PZapis,void *PCon)
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39649969
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
type
  TDataHandler = function(aType: Integer; PZapis, PCon: Pointer): integer; stdcall;

  PSpecialParametrs = ^TSpecialParametrs;
  TSpecialParametrs = [packed? - требует уточнения] record
    ....
  end;

function ModelCreate(Nn: Integer; 
                     aType: Byte; // что за тип UCHAR - не нашёл, unsigned char? 
                     DataHandler: TDataHandler;
                     pCon: Pointer;
                     SpecialParametrs: PSpecialParametrs): Pointer; cdecl;

Если ничего не напутал, то как-то так.
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39649978
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо и еще скажите пожалуйста

char *ServerType как перевести
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39649980
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а UCHAR это видимо ansichar
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39650023
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968а UCHAR это видимо ansichar

Нет, это Byte, всё правильно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39650069
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968char *ServerType как перевести
PByte?
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39650071
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

Или PAnsiChar, в зависимости от контекста.
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39650671
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то совсем я в этих типах С++ запутался подскажите плиз какого типа должна быть дельфийская структура и какие значения должны быть присвоены чтобы было как в С++ на картинке
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39650685
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот описание структуры С++

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
struct _SpecialParametrs {
  DWORD FilterType;              // Тип фильтра
  float Popravka[MAX_SENSOR_NUMBER];
  DWORD SpeedMeasurementPeriod;  // Период измерения частоты вращения 
  unsigned short int AveragingFactor; // Коэффициент усреднения 
  bool  VneshnDatchSkor;         // Есть внешний датчик скорости
  bool  ServerMode;              // Режим сервера 
  int   OwnServerBasePortNumber; // Собственный базовый номер порта
  struct _ParamComPort *PParamComPort; 
  char *ServerAddress;
  int   AnotherServerBasePortNumber;
  UCHAR ServerChannelNumber;
  UCHAR ComPortNumber;
  UCHAR MODBUS_DeviceAddress;
};
#ifndef __DLL__
//--------------------- Структура параметров Сом-порта
struct _ParamComPort {
 int  BaudRate;   // скорость передачи данных
 char BiteSize;   // число битов данных
 char Parity;     // схема контроля четности
 char StopBits;   // число стоповых бит
};



а вот моя структура (в ней видно что-то не верно)

Код: 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.
  TSpecialParametrs = ^SpecialParameters;

  TParamComPort = record
     BaudRate : integer;   // скорость передачи данных
     BiteSize : integer;   // число битов данных
     Parity : integer;     // схема контроля четности
     StopBits : integer;   // число стоповых бит
  end;


  SpecialParameters = record
    FilterType : dword;              // Тип фильтра
    Popravka : array[1..MAX_SENSOR_NUMBER] of fixed;
    SpeedMeasurementPeriod : dword;  // Период измерения частоты вращения
    AveragingFactor : integer; // Коэффициент усреднения
    VneshnDatchSkor : boolean;         // Есть внешний датчик скорости
    ServerMode : boolean;              // Режим сервера
    OwnServerBasePortNumber : integer; // Собственный базовый номер порта
    PParamComPort : ^TParamComPort;
    ServerAddress : PChar;
    AnotherServerBasePortNumber : integer;
    ServerChannelNumber : integer;
    ComPortNumber : integer;
    MODBUS_DeviceAddress : integer;

  end;
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39650718
gssbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверно это как то так должно быть:

Код: 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.
//--------------------- Структура параметров Сом-порта
type
 TParamComPort = packed record
  BaudRate: Integer; // скорость передачи данных
  BiteSize: Byte; // число битов данных
  Parity: Byte; // схема контроля четности
  StopBits: Byte; // число стоповых бит
end;

PParamComPort = ^TParamComPort;

type
  SpecialParametrs = packed record
    FilterType: DWORD; // Тип фильтра
    Popravka: array[0..MAX_SENSOR_NUMBER - 1] of Single;
    SpeedMeasurementPeriod: DWORD; // Период измерения частоты вращения
    AveragingFactor: Word; // Коэффициент усреднения
    VneshnDatchSkor: Boolean; // Есть внешний датчик скорости
    ServerMode: Boolean; // Режим сервера
    OwnServerBasePortNumber: Integer; // Собственный базовый номер порта
    ParamComPort: PParamComPort;
    ServerAddress: PByte;
    AnotherServerBasePortNumber: Integer;
    ServerChannelNumber: Byte;
    ComPortNumber: Byte;
    MODBUS_DeviceAddress: Byte;
end;

...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39650724
gssbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поправочка скорее всего

ServerAddress : PAnsiChar;

Это указатель на массив байт, неизвестной длины(должно быть в документации). В этом Си все через жопу.
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39650744
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на С++ float Popravka[6]; как будет на делфи?
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39650757
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968на С++ float Popravka[6]; как будет на делфи?
Код: pascal
1.
Popravka: array [0..5] of Single;
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39650875
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как в делфи будет выглядеть код

char ServerAddress[300];
AnsiString AS;

AS = EServerAddress->Text;
strcpy(ServerAddress,AS.c_str());

похоже так?

var
ServerAddress : PAnsiChar;
AS : AnsiString;
begin
AS := EServerAddress.Text;
StrCopy(ServerAddress, AS);
end;
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39650948
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968а как в делфи будет выглядеть код

char ServerAddress[300];
AnsiString AS;

AS = EServerAddress->Text;
strcpy(ServerAddress,AS.c_str());

Не всё так просто. Исходный код - это C++ Builder?.. Просто AnsiString вроде не стандартный тип для C++, а в билдере - это класс-обёртка над PAnsiChar, как я понял.
Близко-смысловой перевод будет вот таким:
Код: pascal
1.
2.
3.
4.
5.
6.
var
  ServerAddress: array [0..299] of Char;
  SA: AnsiString; // AS - зарезервированное слово и не может использоваться как имя переменной
begin
  SA := EServerAddress.Text; // Что такое "EServerAddress" - поле ввода?
  StrCopy(ServerAddress, PAnsiChar(SA));


Однако что-то мне подсказывает, что в Delphi это можно сделать эффективнее, но для этого надо понимать весь код.
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39650949
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И как обычно - говнокод, т.к. никто не контролирует что AS влезет в отведённые 300 байт для ServerAddres...
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39650954
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpAnsiString вроде не стандартный тип для C++совершенно верно
alekcvpв билдере - это класс-обёртка над PAnsiCharне, над дельфовым стрингом
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39653490
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть код на С++
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
struct _SK {
  unsigned char ID_Datchik[3];
  UCHAR Temperature;
  UCHAR Korrect;
  unsigned short int K_Zub;
  UCHAR MaxSkorVr;
  UCHAR Date_Poverki[3];
  UCHAR Slug_Inf[49];
};
…..
DLL_EI int DecoderReadTranducerParametrs(void *PDecoder,struct _SK *PTranducerParametrs,char *StrokaDatchikID);  
……
Kod = DecoderReadTranducerParametrs(PDecoder,&SK, StrokaDatchikID);



Нужно воплотить в Делфи
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Type
…
T_SK = record
     ID_Datchik : PAnsiChar;
     Temperature : PChar;
     Korrect : PChar;
     K_Zub : integer;
     MaxSkorVr : PChar;
     Date_Poverki : PChar;
     Slug_Inf : PChar;
   end;
…
Var PT_SK : ^T_SK;
...
Kod := DecoderReadTranducerParametrs(…, ???? ,….);

Что ложно быть тут? Заранее спасибо.
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39653506
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968Что ложно быть тут?

всё почти. В гугле, кстати, полно ответов, ну ладно, один раз.

unsigned char -> Byte // 100%
UCHAR -> Byte // 99.99%
unsigned short int -> Word // 100%

Массивы в структуре ты вообще не объявил. Ладно, пример.
ID_Datchik: Array[ 0 .. 2 ] of Byte;

И еще должны совпадать выравнивание размеров полей (в настройках компилятора, плюс возможны прагмы).
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39653510
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вызов функции (например):
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var
  PT_SK: T_SK;
  Kod: Integer;
begin
  //...
  Kod := DecoderReadTranducerParametrs( ..., @PT_SK, ... );
  //...
end;
...
Рейтинг: 0 / 0
Сопоставление Delphi и C++
    #39653511
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне бы понять как здесь должен выглядеть второй параметр?

Kod := DecoderReadTranducerParametrs(…, ???? ,….);
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сопоставление Delphi и C++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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