Форум на Kuban.ru (http://forums.kuban.ru/)
-   Разработка программ (http://forums.kuban.ru/f1024/)
-   -   Интересный вопрос об интеграции С\С++ (http://forums.kuban.ru/f1024/interesnyj_vopros_ob_integracii_s%5Cs-4063970.html)

DAVIDnovicheeeeek 16.04.2013 19:48

Интересный вопрос об интеграции С\С++
 
Передо мной стоит необычная задача. Требуется на языке С\С++ создать некоторую структуру(граф). Затем эту структуру в виде машинного кода передать в другой "модуль".

Я никогда не сталкивался с подобного рода задачами. Подскажите, как можно в С\С++ перейти к машинному коду, перевести в него некоторые структуры или данные?

wayerr 16.04.2013 21:09

>Затем эту структуру в виде машинного кода передать в другой "модуль".

жесь какая, а можно в виде массива байт?

NTFS_ 16.04.2013 21:58

Если это учебная задача, то стоит задуматься о смене преподавателя/факультета/ВУЗа, ибо согласен с оценкой предыдущего участника.
Если же для реального использования... даже не знаю, зачем это нужно и как реализовать, чтобы не словить проблемы при внедрении.

vxg 16.04.2013 22:55

предлагаю в начале уточнить что автор имеет ввиду. ибо фраза "машинный код" ломает мозг. вы хотите передать объект (данные) в другой модуль или нечто иное?

TVV1 16.04.2013 22:57

Если задачу именно так и поставили, то это жесть ;)
Может тут имели ввиду что нужно создать обычную dll библиотеку ;) хотя конечно фиг его знает

Том 16.04.2013 23:45

Куда куда передать?
Если "модуль" - это не отдельная железяка, то есть смысл тот самый "граф" с его "точками" сделать в виде классов с набором свойств и методов, и никуда вообще не передавать, а весь функционал завернуть в API

DAVIDnovicheeeeek 17.04.2013 17:10

Да, естественно это учебная задача. Естественно я сам не понимаю зачем это нужно делать.

Смысл в том что два человека пишут два "куска" кода. Я делаю часть, которая создает граф(множество связвнных друг с другом дескрипторов, реализовано с помощью структур). Потом полученный граф я должен передать в другой кусок, который его обрабатывает как-то. Но передать это надо зачем-то и как-то в виде машинного кода.

Том 17.04.2013 18:22

Зачем опускаться до уровня машинного кода, когда в Runtime-версии оно само до туда опустится.
Если надо делать на низком уровне - уже всё придумано было в прошлом. Это AddRef, QueryInterface и Release-методы :-)
Делайте COM-объект и передавайте куда хотите что хотите, хоть удаленно через сеть :-)
В машинные кода переводить - это нелепо. Если уж прослойку между модулями мутить в машинных кодах - лучше тогда из них вообще не вылазить на уровень C/C++

Rcorp 17.04.2013 18:53

Шо, таке на асме уже memcpy с перебором такая проблема?

robot bender 0002 17.04.2013 19:26

Создаете объект (класс), описывающий этот граф,
затем в экземпляр класса- забиваете все данные этого графа, и просто передаете этот экземпляр как обычную переменную, передать можно даже по сети, предварительно сделав сериализацию.

Том 17.04.2013 20:47

9- это ж тот же Distributed Component Object Model :-)
Пусть играют в учебные задачи по-взрослому ))

maxxx 17.04.2013 21:43

ОМГ, неужели Абрамов дядя Женя еще преподает?? Узнаю его почерк в "постановке задачи". :))

Rcorp 17.04.2013 21:57

О, точно. Духом Абрамова веет за версту.

maxxx 17.04.2013 22:06

12-Rcorp > Вовек не забуду. :)
Кстати, автор, я бы посоветовал сделать это так, как происходит в нормальном случае - передавать указатель/ссылку своего объекта методам "другого модуля", и авторитетно заявлять, что ты передаешь в "машинном" коде - ну действительно, покажи листинг дизасма - там будет чо-нить типа
move esi, dword ptr [ebp-4]
push esi
call VeryHardFunction
:))

Rcorp 17.04.2013 22:22

13: Думаешь у абрамова прокатит?

maxxx 17.04.2013 23:01

14-Rcorp > А он сам знал, чего хочет? Или может специально так ставил вопросы - типа чтобы "думали". Только о чем - х пойми.
Ну и на самом деле, я думаю, речь об этом. Ну или полная сериализация-десериализация - протокольчик надо будет придумать. Иначе я тоже не понимаю, что есть "передать в машинном коде" . Это 0 и 1 на сегодня (в основном), или я отстал? :)

Rcorp 17.04.2013 23:06

15: А шо, берем таблицу OP-кодов на i386 (надеюсь, он не на Z80 хочет реализацию?) и давай фигачить из таблицы HEXы в массив. А его по поинтеру потом вызывать.

maxxx 17.04.2013 23:14

16-Rcorp > Так а какое отношение данные (граф в нашем случае) имеют к опкоду? Или нужно будет заюзать std::map? Это уже шифрование какое-то прямо. :)
Короче, автор, препод имеет в виду - передать в бинарном виде. Короче, читай выше, делай как советуем - и не парься. Щас всего один год рядовым служат, я вон успел на военную кафедру - потом на 2 года ДВ. :)

05772 08.05.2013 19:00

[quote=DAVIDnovicheeeeek;30048935]как можно в С\С++ перейти к машинному коду, перевести в него некоторые структуры или данные[/quote]
Если я правильно понял, то достаточно объявить требуемое как константы.

vegetables 12.05.2013 19:17

_asm{
**


Текущее время: 05:52. Часовой пояс GMT +3.