Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.11.20;
Скачать: CL | DM;

Вниз

C++ => Object Pascal   Найти похожие ветки 

 
xayam ©   (2011-07-27 17:32) [0]

Помогите плюсы перевести в object pascal.
Заголовок функции:
void sendCommand( Command * cmd );
и класс Command:
class Command
{
protected:
 ...

public:
 inline Command() {}
 virtual char * getData() = 0;

 inline short int getType() { return type; };
 inline short int getSize() { return size; };
 inline void setSize(const short int& s) { size = s; };
};


Заранее Спасибо. Непонятно в основном c * и const short int&


 
KSergey ©   (2011-07-27 17:51) [1]

А я прочитав название решил, что "больше или равно"
"Ну, щас начнется холиварчик", думаю.


 
KSergey ©   (2011-07-27 17:59) [2]

1) procedure sendCommand( var cmd: Command );

2) function getData(): PChar; abstract;

3) procedure setSize(const var s: ShortInt);
ну и в реализации
begin
size = s;
end;

Только про ShortInt я вру, понятно, надо не поленится в гугле поискать какого размера short int и подобрать соотв. тип в Дульфи.
Ну и 3 пункт - эти типа "дословное переложение промтом". Вообще-то в дельфи правильнее сделать property здесь.
Впрочем, передавать по ссылке short int s - это извращение не от большого ума, считаю. Так что если надо функцию в интерфейсе непременно оставить - то просто ShortInt подобный тип передать да и все.


 
KSergey ©   (2011-07-27 18:02) [3]

Вообще-то, если Command в дельфи будет именно классом описан, т.е. объектом (а в record функции не добавить) - то и там никакого var не надо - экземпляры объектов в дельфи и так по ссылкам/указателям передаются.


 
KSergey ©   (2011-07-27 18:03) [4]

а, ну и virtual к abstract я забыл приписать


 
xayam ©   (2011-07-27 18:07) [5]

Только у меня freepascal в режиме objfpc, а не делфи.
Спасибо сейчас попробую.
Не знаю еще как inline оформляется на паскале :(


 
xayam ©   (2011-07-27 18:09) [6]


> const var s: ShortInt

наверно без var? все равно по ссылке же


 
xayam ©   (2011-07-27 18:32) [7]


> virtual char * getData() = 0;
> function getData: PChar; virtual; abstract;

вот и непонятно куда делось "= 0"


 
123   (2011-07-27 18:45) [8]


> вот и непонятно куда делось "= 0"

=

> abstract;


 
xayam ©   (2011-07-27 18:59) [9]


> abstract;

никогда не использовал :(

Еще тупой вопрос, аналог C++ типа std::string на freepascal?


typedef basic_string<char, char_traits<char>, allocator<char> >
string;


 
123   (2011-07-27 19:05) [10]


> Еще тупой вопрос, аналог C++ типа std::string на freepascal?

прямого аналога нет
возможно string паскалевский подойдет, по коду смотреть надо


 
123   (2011-07-27 19:06) [11]

точнее - подойти то он подойдет, но наверняка придется сам код изменять, а не переписывать под копирку на паскале


 
xayam ©   (2011-07-27 19:21) [12]

Есть ещё :)
class SingleBoardObserver
{
public:
 virtual ~SingleBoardObserver() { };
 virtual void update(std::shared_ptr<Message> msg) = 0;
};


~ непонятно
std::shared_ptr<Message> тоже
Класс Message:
class Message

protected:
 /**< The message type */
 int type_;
 /**< The length of the received message */
 int length_;

public:
 virtual void toString(std::string&) = 0;
 virtual void toHexString(std::string&) = 0;
 inline int getType()  { return type_; } ;
 virtual void getData(short *) = 0;
 virtual Message* clone() = 0;
 virtual int getLength() = 0;

"перевёл" пока так, но явно что-то неправильно:
PTMessage = ^TMessage; { ??? }
    TMessage = class

      protected

         type_  : Integer;
         length_: Integer;

      public

         procedure toString   ( var s: AnsiString ); virtual; abstract;
  procedure toHexString( var s: AnsiString ); virtual; abstract;
  function  getType    : Integer;
  procedure getData    ( var p: ShortInt   ); virtual; abstract;
  function  clone      : PTMessage; { ??? TMessage }   virtual; abstract;
  function  getLength  : Integer;             virtual; abstract;

    end;


 
123   (2011-07-27 19:33) [13]


> ~ непонятно

деструктор

> std::shared_ptr<Message> тоже

"шаблонная магия" с++ - указатель с подсчетом ссылок на объект типа Message
возможно, пойдет msg : PMessage;


 
©   (2011-07-27 22:17) [14]


> "перевёл" пока так, но явно что-то неправильно:
> PTMessage  = ^TMessage; { ??? }

не дочитал сразу
неправильно

class - уже указатель


 
Dimka Maslov ©   (2011-07-27 22:36) [15]

советую написать на сях дополнительную оболочку, которая будет включать в себя только те элементы, которые однозначно имеют полные эквиваленты в обоих языках.


 
Аноним   (2011-07-28 05:40) [16]

Удалено модератором


 
KSergey ©   (2011-07-28 13:59) [17]

А в чем суть задачи вообще-то?


 
xayam ©   (2011-07-29 01:12) [18]


> А в чем суть задачи вообще-то?

сишную dll использовать из freepascal.
Загрузка/выгрузка легко делается. Протестировал из fp заголовки экспортируемых функций, getprocadress нормально отрабатывает без ошибок. Осталось заголовки функций и параметры перевести в fp...


 
KSergey ©   (2011-07-29 09:46) [19]

Если dll экспортирует функции с сишными классами в декларации - то никак. Вообще никак.
Ну и того, кто сделал такую ДЛЛ (если не для унутреннего сугобо поприетарного употребления делалось) - расстрелять. Я разрешил.

В общем вариант только один: сделать на той же версии компилятора С++ оберточную DLL, которая все эти вызовы будет транслировать в нечто однозначно портируемое - только тогда уже можно будет работать. Без этого - никак. Никаких аналогов вы не подберете.



Страницы: 1 вся ветка

Текущий архив: 2011.11.20;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.008 c
15-1311210934
fzt
2011-07-21 05:15
2011.11.20
Окно подсказок по исходникам


4-1251571846
Student
2009-08-29 22:50
2011.11.20
Перехват сообщения DoubleClick


15-1311712200
Юрий
2011-07-27 00:30
2011.11.20
С днем рождения ! 27 июля 2011 среда


2-1311737467
Abcdef123
2011-07-27 07:31
2011.11.20
Сохранение положения форм при последующем входе в программу.


2-1311793235
Drowsy
2011-07-27 23:00
2011.11.20
При уничтожении модуля данных возникает AV.