Вопрос № 181266: Здравствуйте, уважаемые эксперты! У меня стоит задача: некоторые функции написанные на Си надо включить в программу на Паскале. Для программы используется Borland Pascal 7 (Delphi пока нельзя). Для функций -- Borland C++ 3.1 (можно другой, но...
Вопрос № 181267: Здравствуйте, уважаемые эксперты! Прошу Вас помочь написать программу вставки и удаления элементов списка, используя для реализации списка двусвязный список. ...
Вопрос № 181270: Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос: вычислить скалярное произведение двух векторов размером 10000000 с помощью MMX комманд. Среда: Microsoft Visual Studio 2008. ...
Вопрос № 181290: Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос: как можно добавить в стандартный калькулятор (Windows) еще 1 кнопку с определенной функцией, не используя декомпилятор? ...
Вопрос № 181266:
Здравствуйте, уважаемые эксперты!
У меня стоит задача: некоторые функции написанные на Си надо включить в программу на Паскале. Для программы используется Borland Pascal 7 (Delphi пока нельзя). Для функций -- Borland C++ 3.1 (можно другой, но что есть для DOS?)
Проблема 1. Компилятор Паскаля успешно линкует obj файл, но не находит функции. При включении в Си опции "Generate assembler code" обнаружил, что функциям даются чудные имена. Например, функция int qwe(int i) там называется
qwe$qi. Я поменял вручную имена на qwe, скопилировал obj в tasm и в Паскале всё правильно заработало. Откуда такое название? Как это отключить?
Проблема 2. Эти функции на Си -- математические; там используются abs, sin и прочее из math.h. Когда я их добавил, Паскаль сказал, что не находит _abs, _sin. Как можно справиться с этим затруднением?
Отвечает Павел Юрьевич (6-й класс) :
Здравствуйте, Сергей Бендер!
Средствами Borland C++ 3.1 создайте DLL со всеми необходимыми функциями, а затем подключите этот DLL в Borland Pascal.
Решение проблемы №1: Для того, чтобы имена собственных функций экспортировались в объектный файл в том виде, в каком они присутствуют в исходном коде программы, необходимо добавлять в определении функции ключевое слово pascal, например:
Код:
double pascal qwe(double d)
Решение проблемы №2: Для передачи в программу на Паскале функционала математических функций, таких как sin, cos, log, exp и т.д. при невысоких требованиях к производительности, данные функции проще всего реализовать в исходной программе
на C путем вычисления суммы N членов ряда Тейлора, в который можно разложить указанные функции. На практике достаточно 3-4 членов ряда. Разложение в ряд с примерами описано здесь: http://ru.wikipedia.org/wiki/Ряд_Тейлора
Ответ дополнен по просьбе автора.
-----
∙ Отредактировал: Николай Владимирович / Н.В. (Администратор)
∙ Дата редактирования: 15.12.2010, 19:41 (время московское)
Ответ отправил: Павел Юрьевич (6-й класс)
Ответ отправлен: 13.12.2010, 06:52
Номер ответа: 264699
Оценка ответа: 5 Комментарий к оценке: В первую очередь за то, что долго обсуждали и перебирали варианты.
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 264699
на номер 1151 (Россия) |
Еще номера »
Вопрос № 181267:
Здравствуйте, уважаемые эксперты! Прошу Вас помочь написать программу вставки и удаления элементов списка, используя для реализации списка двусвязный список.
Отвечает Хватов Сергей (Профессионал) :
Здравствуйте, Шаталов Виктор Олегович! Слегка упрощённая реализация списка из ядра linux. Я её использовал в нескольких проектах на plain c. Компилятор - gcc.
Приложение:
Ответ отправил: Хватов Сергей (Профессионал)
Ответ отправлен: 13.12.2010, 08:24
Номер ответа: 264701
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 264701
на номер 1151 (Россия) |
Еще номера »
Вопрос № 181270:
Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос: вычислить скалярное произведение двух векторов размером 10000000 с помощью MMX комманд. Среда: Microsoft Visual Studio 2008.
Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 14.12.2010, 14:08
Номер ответа: 264767 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 264767
на номер 1151 (Россия) |
Еще номера »
Вопрос № 181290:
Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос: как можно добавить в стандартный калькулятор (Windows) еще 1 кнопку с определенной функцией, не используя декомпилятор?
Отвечает Павел Юрьевич (6-й класс) :
Здравствуйте, Шаталов Виктор Олегович!
Пишете программу, у которой будет отображаться стандартный калькулятор и рядом своя панель с кнопками. При этом Вам необходимо внедриться в процесс calc.exe и перехватывать и обрабатывать все действия самому, в том числе и обрабатывая свои кнопки.
Ответ отправил: Павел Юрьевич (6-й класс)
Ответ отправлен: 13.12.2010, 09:44
Номер ответа: 264705
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 264705
на номер 1151 (Россия) |
Еще номера »
Отвечает Сандров Алекс (Студент) :
Здравствуйте, Шаталов Виктор Олегович!
Легко! Для этого надо: 1. Создать кнопку, с нулемым ID, положить её на калькулятор(опционально); 2. Сделать сабклассинг кнопки, и ловить WM_LBUTTONUP, т.е. момент, когда её отжали. По умолчанию, кнопка пошлёт WM_COMMAND своему родителю, но родитель у неё будет калькулятор, и мы ничего не узнаем. Кроме того, ID = 0 как раз для того, чтобы калькулятор никак не прореагировал на кнопку, как на свою собственную. К примеру, если разместить свою кнопку на калькуляторе,
с ID = 131, то она будет работать подобно кнопке [7], даже без сабклассинга (см. аттач). 3. При отжатии кнопки(то самое WM_LBUTTONUP), вычитать содержимое EditBox-а с калькулятора, он там один, ищется просто. Самый простой вариант - послать окну Ctrl+C и вычитать clipboard. 4. Сделать нужные действия и положить данные обратно в EditBox. Самый простой вариант - записать в clipboard и послать окну Ctrl+V.
Все эти действия можно делать 2 путями. 1. С
оздать "невидимое" приложение, которое будет следить за калькуляторами, за их появлением. Это просто, exe-файл калькулятора постоянных во всех системах, класс окна - SciCalc. Следить можно, например, через SetWinEventHook, на открытие окна, это просто и можно делать в одном приложении всё. 2. Непосредственно запускать программу и указывать ей окно калькулятора(hwnd окна) и делать тоже самое, что и в п. 1.
Прикрепленный файл:загрузить »
Ответ отправил: Сандров Алекс (Студент)
Ответ отправлен: 13.12.2010, 10:39
Номер ответа: 264708
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 264708
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.