Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2011.11.20;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.003 c
4-1251885319
LightGreen
2009-09-02 13:55
2011.11.20
WM_CHAR - кодировка символов


15-1311061925
Unknown555
2011-07-19 11:52
2011.11.20
оператор goto


15-1311598347
fzt
2011-07-25 16:52
2011.11.20
Как писать плагин к Delphi? для чайников


15-1311360240
Дмитрий С
2011-07-22 22:44
2011.11.20
Есть простой способ скопировать параметры безопастности


15-1311077706
>|<
2011-07-19 16:15
2011.11.20
Как назвать ТЗ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский