Форум: "Прочее";
Текущий архив: 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