View unanswered posts | View active topics It is currently Sun Nov 17, 2019 10:37 am



Reply to topic  [ 25 posts ]  Go to page Previous  1, 2, 3  Next
API для SECU 
Author Message
LQFP112 - Up with the play

Joined: Sat Jun 09, 2012 11:12 am
Posts: 200
STC wrote:
нужно компилировать с использованием MS Visual Studio и делать в виде динамически линкуемой DLL.

Я давно не использовал DLL. Подзабыл кое что... Но не думаю, что это проблема.
А если сразу использовать DLL менеджера?
Что мне мешает создать объект класса CCommunicationManager используя DLL и хедер файлы. Правда, похоже что хедеры нужно будет слегка поправить...
При этом использую следующие DLL (поправь если неправ):
fwimpexp.dll, hexutils.dll, io-core.dll, paramdesk.dll.

STC wrote:
более правильно будет перетянуть к себе класс PlatformParamHolder.

Ок!

_________________
ВАЗ 2103 , Secu-3 (m32),
ДАД GM Daewoo, ДТОЖ 23.3828,
Катушка 2111-3705010


Thu Jan 17, 2013 7:19 pm
Profile
LQFP144 - On Top Of The Game
User avatar

Joined: Fri Oct 22, 2010 10:47 pm
Posts: 2417
Location: Ukraine, Kiev
Quote:
А если сразу использовать DLL менеджера?
Что мне мешает создать объект класса CCommunicationManager используя DLL и хедер файлы. Правда, похоже что хедеры нужно будет слегка поправить...
При этом использую следующие DLL (поправь если неправ):
fwimpexp.dll, hexutils.dll, io-core.dll, paramdesk.dll.

По идее тебе не нужно ничего кроме io-core. Но для ее подключения к Builder тебе нужно написать прослойку (твой API) и желательно чтобы эта прослойка выглядела как набор С-функций с конвенцией вызова cdecl. У твоего API будет отдельный заголовочный файл (*.h) и файл *.cpp в котором будет реализация API (создание классов и вызов функций из кишков io-core). Заголовочные файлы править наверное не нужно, так как ты врядли будешь вызывать ф. напрямую, а только через свой API.
Я не знаю можно ли из Builder работать с DLL связанной на этапе компиляции, скорее всего нужно будет делать "позднее звязывание" (как сделано в SECU-3 Manager когда он вызывает ф. из Builder). Я имею ввиду рботу через ф. GetModuleHandle и GetProcAddress

_________________
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook


Fri Jan 18, 2013 2:15 pm
Profile ICQ WWW
LQFP112 - Up with the play

Joined: Sat Jun 09, 2012 11:12 am
Posts: 200
STC wrote:
По идее тебе не нужно ничего кроме io-core.

Ok!
Посмотрел исходники CCommunicationManager. В принципе переписать его в Builder несложно.
Нужно будет переписать инициализацию ISettingsData* m_pSettings;

Нужно-ли в API беспокоиться о взаимодействии адаптеров и контроллеров? Или достаточно, например:
m_pControlApp->SetEventHandler(m_pAppAdapter);

А что делает объект EventHandler в классе CCommunicationManager?

Для чего и как часто нужно включать/выключать контроллеры?
(в контексте API)

P.S.
Проблемы подключения Builder к Microsoft DLL в любом виде, вроде решаемы.

_________________
ВАЗ 2103 , Secu-3 (m32),
ДАД GM Daewoo, ДТОЖ 23.3828,
Катушка 2111-3705010


Fri Jan 18, 2013 5:16 pm
Profile
LQFP144 - On Top Of The Game
User avatar

Joined: Fri Oct 22, 2010 10:47 pm
Posts: 2417
Location: Ukraine, Kiev
Quote:
Посмотрел исходники CCommunicationManager. В принципе переписать его в Builder несложно.
Нужно будет переписать инициализацию ISettingsData* m_pSettings;


Думаю что без особой надобности переписывать его не нужно, нужно просто использовать его внутри реализации твоего API.
ISettingsData тебе не нужен, так как он описывает доступ к настройкам менеджера, а тебе они не нужны. В местах где вызываются функции этого интерфейса просто поставь нужные тебе значения или свои функции.

Quote:
Нужно-ли в API беспокоиться о взаимодействии адаптеров и контроллеров? Или достаточно, например:
m_pControlApp->SetEventHandler(m_pAppAdapter);

Нет, беспокоиться не нужно. Адаптеры и контроллеры уже связываются вместе и инициализируются в CCommunicationManager.

Quote:
А что делает объект EventHandler в классе CCommunicationManager?

Если открыть окно настроек менеджера и нажать ОК, то вызовется метод MainFrameController::OnAppSettings(), он в свою очередь сделает вызов m_pCommunicationManager.Init(), а тот в свою очередь вызовет EventHandler (это функция). Каждый контроллер вкладки в менеджере подписывается на на вызов EventHandler вызывая ССommunicationManager::setOnSettingsChanged() и передавая в качестве параметра адрес своего метода (например см. СParamMonTabController::OnSettingsChanged()). Таким образом каждый контроллер вкладки уведомляется о том, что настройки менеджера изменились.

Quote:
Для чего и как часто нужно включать/выключать контроллеры?
(в контексте API)

В менеджере они включаются/выключаются при переходе между вкладками. Переключение контроллеров нужно чтобы работать или с прошивкой или с бутлоадером. В принципе это не нужно, просто я с самого начала так сделал (когда только начинал писать менеджер), а потом не стал переделывать.
Тебе понадобится переключать их если ты захочешь работать и с прошивкий и с загрузчиком. Если тебе нужно работать только с прошивкой, то включи 1 раз при инициализации API соответствующий контроллер и все.

_________________
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook


Fri Jan 18, 2013 7:18 pm
Profile ICQ WWW
LQFP112 - Up with the play

Joined: Sat Jun 09, 2012 11:12 am
Posts: 200
STC wrote:
Думаю что без особой надобности переписывать его не нужно

Скажем так, не переписать а почти скопировать -)
В любом случае, исходник как он есть, не скомпилируется в Builder ( если точнее , у меня CodeGear 2009.но это не меняет суть).

STC wrote:
ISettingsData тебе не нужен, так как он описывает доступ к настройкам менеджера

Да, согласен.

STC wrote:
Если открыть окно настроек менеджера и нажать ОК, то вызовется метод MainFrameController::OnAppSettings(), он в свою очередь сделает вызов m_pCommunicationManager.Init()

T.o. если API меняет платформу или параметры порта -вызываем СCommunicationManager::Init(void) ?

STC wrote:
Если тебе нужно работать только с прошивкой, то включи 1 раз при инициализации API соответствующий контроллер и все.

Ок!

_________________
ВАЗ 2103 , Secu-3 (m32),
ДАД GM Daewoo, ДТОЖ 23.3828,
Катушка 2111-3705010


Fri Jan 18, 2013 8:07 pm
Profile
LQFP144 - On Top Of The Game
User avatar

Joined: Fri Oct 22, 2010 10:47 pm
Posts: 2417
Location: Ukraine, Kiev
Quote:
T.o. если API меняет платформу или параметры порта -вызываем СCommunicationManager::Init(void) ?

Нужно вызывать только если изменились параметры порта.

_________________
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook


Fri Jan 18, 2013 11:34 pm
Profile ICQ WWW
LQFP112 - Up with the play

Joined: Sat Jun 09, 2012 11:12 am
Posts: 200
STC wrote:
В интернете есть инфа как это делать (делается через def файл), там вроде отличие только в наличии или отсутствии подчеркиваний в именах ф.

С функциями проще. С классами сложнее. Похоже, с классами я "погорячился" насчет подключения MS DLL к Builder.
В общем сделал импорт библиотеки из DLL(утилиткой implib.exe). Но декорирование имен в библиотеке осталось от MS VC++ (не понимает его Builder -).
coff2omf.exe не хочет преобразовывать lib-файл...
Если грузить DLL в процессе выполнения программы, то непонятно как получить указатель на конструктор класса для создания объекта. Тогда нужно что-то менять(добавлять) в исходниках....
В общем, если есть у тебя осталась библиотека от компиляции io-core.dll - вышли, если не затруднит.

_________________
ВАЗ 2103 , Secu-3 (m32),
ДАД GM Daewoo, ДТОЖ 23.3828,
Катушка 2111-3705010


Sat Jan 19, 2013 10:25 pm
Profile
LQFP144 - On Top Of The Game
User avatar

Joined: Fri Oct 22, 2010 10:47 pm
Posts: 2417
Location: Ukraine, Kiev
Quote:
С функциями проще. С классами сложнее. Похоже, с классами я "погорячился" насчет подключения MS DLL к Builder.

Я бы с классами не заморачивался, а сделал бы API в виде С-функций.

Quote:
В общем сделал импорт библиотеки из DLL(утилиткой implib.exe). Но декорирование имен в библиотеке осталось от MS VC++ (не понимает его Builder -).
coff2omf.exe не хочет преобразовывать lib-файл...

Попробуй поиграться с def-файлом. Вот пример из SECU-3 Manager:
Code:
EXPORTS
  ; VC funcname              = BCB funcname
  Chart2DCreate              = _Chart2DCreate
  Chart2DUpdate              = _Chart2DUpdate
  Chart2DSetOnChange         = _Chart2DSetOnChange
  Chart2DSetOnClose          = _Chart2DSetOnClose
  Chart2DSetMarksVisible     = _Chart2DSetMarksVisible 
  Chart2DSetAxisValuesFormat = _Chart2DSetAxisValuesFormat
  Chart2DSetOnGetAxisLabel   = _Chart2DSetOnGetAxisLabel
  Chart2DInverseAxis         = _Chart2DInverseAxis
  Chart2DShow                = _Chart2DShow
  Chart2DSetLanguage         = _Chart2DSetLanguage
  Chart2DSetOnWndActivation  = _Chart2DSetOnWndActivation
  Chart2DEnable              = _Chart2DEnable
  Chart2DSetAxisEdits        = _Chart2DSetAxisEdits
  Chart2DUpdateAxisEdits     = _Chart2DUpdateAxisEdits

Тебе по идее нужно левую и правую части поменять местами.

Quote:
Если грузить DLL в процессе выполнения программы, то непонятно как получить указатель на конструктор класса для создания объекта. Тогда нужно что-то менять(добавлять) в исходниках....

Ну сделать банальную функцию, которая будет создавать объект и возвращать указатель. Можно через "фабрику" сделать.
Quote:
В общем, если есть у тебя осталась библиотека от компиляции io-core.dll - вышли, если не затруднит.

Осталась:


Attachments:
io-core_static_lib.zip [12.55 KiB]
Downloaded 173 times

_________________
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Sat Jan 19, 2013 10:42 pm
Profile ICQ WWW
LQFP112 - Up with the play

Joined: Sat Jun 09, 2012 11:12 am
Posts: 200
STC wrote:
Я бы с классами не заморачивался, а сделал бы API в виде С-функций.


Прошу прощения - долго не отвечал.
Речь шла об использовании io-core.DLL. А в DLL -классы. Их не вытянуть в виде функций.
А если насчет DEF файла, то например определения конструктора класса CComPort выглядят так:
VC ??0CComPort@@QAE@ABV0@@Z
Builder @CComPort@$bctr$qiuiui
Т.о., в лучшем случае нужно собрать заново DLL -)

Решил пойти другим путем. Сейчас закончил адаптацию классов в каталоге io-core под Builder.
Сделал все кроме адаптеров, так как там построено все на CWnd.
В файлах сделал изменения по #define USE_FOR_API_BUILDER. Изменения можно
найти поиском по строке @Add_serge_5518. В основном это отличия синтаксиса и линковки заголовочных файлов. Архив с измененными файлами привожу ниже. Можно подумать как эти изменения интегрировать более изящно -). Если вариант с изменениями в исходниках одобряешь - можно двигаться дальше.


Attachments:
io-core_changed.zip [69.78 KiB]
Downloaded 160 times

_________________
ВАЗ 2103 , Secu-3 (m32),
ДАД GM Daewoo, ДТОЖ 23.3828,
Катушка 2111-3705010
Wed Jan 23, 2013 11:17 am
Profile
LQFP144 - On Top Of The Game
User avatar

Joined: Fri Oct 22, 2010 10:47 pm
Posts: 2417
Location: Ukraine, Kiev
Quote:
Речь шла об использовании io-core.DLL. А в DLL -классы. Их не вытянуть в виде функций.

Я имел ввиду написать обертки для классов на С.

Quote:
Сделал все кроме адаптеров, так как там построено все на CWnd.

Замени его на аналогичный класс в билдере. СWnd используется для получения сообщений, это невидимое окно у которого родительским является главное окно (да любое). Эти сообщения посылает поток из CControlApp.

Quote:
В файлах сделал изменения по #define USE_FOR_API_BUILDER. Изменения можно
найти поиском по строке @Add_serge_5518. В основном это отличия синтаксиса и линковки заголовочных файлов. Архив с измененными файлами привожу ниже. Можно подумать как эти изменения интегрировать более изящно -). Если вариант с изменениями в исходниках одобряешь - можно двигаться дальше.

В принципе ничего против варианта с исходниками не имею, думаю что можно и так. Архив посмотрю вечером.

_________________
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook


Wed Jan 23, 2013 11:34 am
Profile ICQ WWW
Display posts from previous:  Sort by  
Reply to topic   [ 25 posts ]  Go to page Previous  1, 2, 3  Next

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software for PTF. ColorizeIt.