|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
14.06.2010, 19:59 | #11 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
а вы знаете смещение вашей метки относительно начала ДЛЛ функции?
думаю лучше уж сделать отдельную функцию, чем извращатся(ИМХО подход не удачен) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
16.06.2010, 18:39 | #12 | |
Пользователь
Регистрация: 17.11.2009
Сообщений: 65
|
Цитата:
Код:
Исходим из того, что при динамическом (явном) экспорте метод класса не экспортируем по стандарту, а только суррогатно как функция, типы Код:
Код:
Код:
если классов и методов в классе много. Достаточно прописать в хедере исходника DLL эти "jmp eax", причем через макросы с аргументом, сделать условную компиляцию этой части псевдодекларации класса для вызывающего модуля через Код:
Код:
Код:
Кроме того, с двойной передачей параметров (если не использовать "jmp eax", а обычные средства вызова с возвратом) могут возникнуть проблемы - придется разбираться в каждом случае отдельно. Есть другие простые способы для этого примера?
CPUcode&Asm1801ВМ1,AsmZ80,Asm xPentiumII, Basic,Pascal,Forth,LSL, Delphi,C++,MySQL; web&game prog-ng,code hacking; DreamWeaver,C++Visual&Builder,Photo shop,3Dmax,GoldWaveEditor,Softice..
Последний раз редактировалось nacgull; 17.06.2010 в 10:11. Причина: некорректно прописан код |
|
16.06.2010, 20:37 | #13 | |
Форумчанин
Регистрация: 14.12.2009
Сообщений: 716
|
Цитата:
|
|
16.06.2010, 22:28 | #14 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
nacgull, а можно ещё раз, чего мы этим добились? ИМХО, бред вообще. Минусы на лицо - усложнение читабельности, более высокая вероятность ошибок, а зачем всё это? Если Вас не затруднит, разъясните поподробней выгоду всего этого шаманства )
|
17.06.2010, 10:50 | #15 | |
Пользователь
Регистрация: 17.11.2009
Сообщений: 65
|
Цитата:
Шаманство в последнем примере возникло в основном из обще- программистской проблемы экспорта классов с DLL. Когда-то ООП как такового направления не было. Со времени его появления экспорт классов с DLL решили только частично, о чём было сказано в этом примере. А вот реализация Код:
Код:
С++ исповедует блочный принцип вложенности с возвратом через стек. Даже при генерации исключения происходит выход из блока стандартным образом. С Код:
Код:
Ассемблер не ограничен таким принципом, а разрешает всё что угодно - кроме микроассемблирования. С помощью Код:
Но С++ ВКЛЮЧАЕТ в себя часть возможностей Ассемблера как специальное средство для решения задач вроде непредвиденной стандартом компилятора С++ ситуации (ограничение ресурса времени//аппарата). Вспомним, что С++ есть языком промежуточного уровня между высоким и низким (Ассемблер). Специальные средства позволяют значительно увеличить возможности языка относительно реализации программы, но склоняют к связи с аппаратной частью ограничивая таким образом математические, экономические и другие модели, имхо. //------------------------------------------------------------- Я оцениваю в плюс как улучшение читабельности при переносе значительной части кода с основного модуля во вспомогательный модуль DLL с его преимуществами относительно ресурсов аппаратной части компа. Ухудшение читабельности возникает при замене вызовов методов объектов на суррогатные обращения к DLL, кроме того весомое усложнение - замена ВСЕХ мест с вызовами методов классов DLL - всё это относится к прогам с большим количеством мест с вызовами методов DLL. Естественно при паре-тройке вызовов такое использование ближе к высокому уровню языка - проще применить указатель на метод или переменную класса с DLL нежели ассемблерную вставку. Резюме.В любом случае указатели на методы DLL надо будет задекларировать и инициализировать - количество этих деклараций равно количеству деклараций при способе помещения jmp eax в псевдодекларацию методов класса. Сложность деклараций примерно равна, а читабельность и переносимость основной части проги со вторым способом выше. Пожелания. Хорошо бы применить к компилятору плагин исключающий вышеописаную ассемблерную вставку, позволяющий модифицировать оперетор goto и гибко работать с меткой
CPUcode&Asm1801ВМ1,AsmZ80,Asm xPentiumII, Basic,Pascal,Forth,LSL, Delphi,C++,MySQL; web&game prog-ng,code hacking; DreamWeaver,C++Visual&Builder,Photo shop,3Dmax,GoldWaveEditor,Softice..
Последний раз редактировалось nacgull; 17.06.2010 в 13:02. |
|
17.06.2010, 12:19 | #16 | ||
Пользователь
Регистрация: 17.11.2009
Сообщений: 65
|
К сожелению, моя подпись ограничена около 250 знаками системы строки подписи
Цитата:
Если еще пошаманить - можно с помощью __asm "выдрать" с goto label адрес перехода на метку и поместить его в переменную или регистр проца. Код:
Код:
Хорошо бы применить __asm в inline -функции, но увы - мой Билдер банит такое. Придется, в духе ассемблерщика, макрос пялить. Может в настройках проблемка? Кстати, перегрузка оператора goto в Билдере или msVisual C++ допускается? Цитата:
Когда однажды применить ассемблерную вставку - можно поставить галочку пройденного в ДЕЙСТВИТЕЛЬНОСТИ очередного уровня на трудном пути к званию Гуру С++
CPUcode&Asm1801ВМ1,AsmZ80,Asm xPentiumII, Basic,Pascal,Forth,LSL, Delphi,C++,MySQL; web&game prog-ng,code hacking; DreamWeaver,C++Visual&Builder,Photo shop,3Dmax,GoldWaveEditor,Softice..
Последний раз редактировалось nacgull; 17.06.2010 в 13:29. |
||
17.06.2010, 16:00 | #17 | |||
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Цитата:
Цитата:
Цитата:
|
|||
17.06.2010, 16:43 | #18 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
а вот уже короткий/длинный это да. это я к тому что не надо путать понятия Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 17.06.2010 в 16:46. |
|
18.06.2010, 17:42 | #19 | ||
Пользователь
Регистрация: 17.11.2009
Сообщений: 65
|
Но автор темы - не очень
на ассемблере всего одна команда Код:
Адрес метки можно получить скажем так - ничего ассемблерного: Код:
Цитата:
Код:
Код:
Цитата:
Слышал о таком, но руки пока не дошли до изучения. Можете в двух словах растолковать? Как я понимаю, речь идет об интерфейсе объекта?
CPUcode&Asm1801ВМ1,AsmZ80,Asm xPentiumII, Basic,Pascal,Forth,LSL, Delphi,C++,MySQL; web&game prog-ng,code hacking; DreamWeaver,C++Visual&Builder,Photo shop,3Dmax,GoldWaveEditor,Softice..
Последний раз редактировалось nacgull; 18.06.2010 в 18:32. |
||
18.06.2010, 17:46 | #20 |
Пользователь
Регистрация: 17.11.2009
Сообщений: 65
|
Oh, I am sorry. Забыл из-за того, что начал заниматься ассемблером x86 раньше, нежели Билл придумал винду32
CPUcode&Asm1801ВМ1,AsmZ80,Asm xPentiumII, Basic,Pascal,Forth,LSL, Delphi,C++,MySQL; web&game prog-ng,code hacking; DreamWeaver,C++Visual&Builder,Photo shop,3Dmax,GoldWaveEditor,Softice..
Последний раз редактировалось nacgull; 18.06.2010 в 18:06. |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
goto bye; Ошибка при компиляции в MVS2008 | TheWanderer | Общие вопросы C/C++ | 4 | 14.06.2010 18:10 |
goto | Serg12 | Помощь студентам | 12 | 14.06.2010 17:31 |
GoTo | Diego__ | Microsoft Office Word | 3 | 13.03.2010 19:55 |
чем заменить goto? | Agronom | Общие вопросы C/C++ | 3 | 19.12.2009 19:43 |
php goto | TDrive | PHP | 10 | 28.07.2009 00:04 |