delphi object как это выглядит в с++

crause
Дата: 11.05.2015 16:05:08
как в с++ будет выглядеть такой код?
если можете покажите как и в с#.

нужно заранее знать о совместимости разрабатываемой модульной системы

type
 TMyObject = class(Tobject)
 procedure calc;
 end;

procedure test(p:pointer);
begin
 TMyObject(p).calc;
end;

//где-то далеко в коде
begin
 MyObject := TMyObject.Create;
 test(@MyObject);
end;
Dimitry Sibiryakov
Дата: 11.05.2015 16:22:01

crause
как в с++ будет выглядеть такой код?

Хреново будет выглядеть. Используй интерфейсы.

Posted via ActualForum NNTP Server 1.5

crause
Дата: 11.05.2015 18:44:46
немного перефразирую вопрос. с++ или c# сможет также присвоить к своему же объекту указатель на объект Pointer или Farproc???
Dimitry Sibiryakov
Дата: 11.05.2015 18:51:19

C++ может присвоить любой указатель любому другому указателю. Но двоичная структура С++
объекта и Delpi объекта (в частности VMT) совпасть не обязаны. Двоичные структуры
интерфейсов совпадают гарантированно. Они, собственно, затем и задумывались.

PS: У FPC всё ещё хуже, так что и интерфейсы в половине случаев несовместимы.

Posted via ActualForum NNTP Server 1.5

YesSql
Дата: 11.05.2015 19:13:21
crause
немного перефразирую вопрос. с++ или c# сможет также присвоить к своему же объекту указатель на объект Pointer или Farproc???


Можно. Через dynamic_cast или static_cast или reinterpret_cast. Зависит от уровня авантюризма в крови
.
crause
Дата: 11.05.2015 19:26:58
модульная система будет только хранить описание и указатели на функции, само исполнение этих функций будет лежать на этих же модулях.
YesSql
Дата: 11.05.2015 19:28:54
YesSql
crause
немного перефразирую вопрос. с++ или c# сможет также присвоить к своему же объекту указатель на объект Pointer или Farproc???


Можно. Через dynamic_cast или static_cast или reinterpret_cast. Зависит от уровня авантюризма в крови
.


Ой. я наверное не понял вопрос. Вопрос был "как выглядит код" или "как передать указатель на паскалевский обьект в модуль на С++" ?
YesSql
Дата: 11.05.2015 19:36:08
crause
модульная система будет только хранить описание и указатели на функции, само исполнение этих функций будет лежать на этих же модулях.

a..
void test(void *ptr)
{
    static_cast<TMyObject *>(ptr)->calc();
}
egorych
Дата: 11.05.2015 20:22:33
YesSql, а разве static_cast к void * допустим? reinterpret_cast или C-style, имхо
crause
Дата: 11.05.2015 21:12:01
спасибо, радует то что это можно