Разобрался я что было с showparam. Дело было в разрядность enum. В Builder для enum типа выделяется 16бит, а T2W ждет 32. пока вызывается еще одна функция портятся старшие разряды. Не смог переключить на 32-х битный режим enum, переопределил все enum как unsigned int. К MDI подключается, но при попытке связаться с ECU выдает ошибку "Нет связи", причем MDI релюшками щелкает как-то по-другому и в CAN-е ни одного пакета. Предполагаю, что проблема с передачей аргументов, а точнее с их разрядностью. Передавать enum надо в виде 32-х разрядного числа, это я понял, а вот как упаковывать в структуры не ясно.
Я тож подумывал над VC++, но на работе мне на нем писать будет сложно, поэтому остановлюсь пока на билдере. Сегодня выкинул все записи в файл, переделал калбак:
И, как ни странно, все заработало. К блоку MDI подключился.
Теперь надо подчистить вывод в файл и все должно работать, только замучался я выписывать в файл все эти структуры.
Когда в структуре указатель на структуру, да еще надо смотреть какого типа в зависимости от другого элемента структуры.... жесть....
Еще думал как бы связать эту DLL с другим приложением. Чтобы не в файл писать, а на форме отображалось. Форму в DLL добавить не могу, т.к. стоит режим без подчеркиваний, чтобы экспортируемые функции не _подчеркивал, а тупой билдер после этого свои же функции найти не может.
Еще думал как бы связать эту DLL с другим приложением. Чтобы не в файл писать, а на форме отображалось. Форму в DLL добавить не могу, т.к. стоит режим без подчеркиваний, чтобы экспортируемые функции не _подчеркивал, а тупой билдер после этого свои же функции найти не может.
Напиши форму в отдельныю DLL и приделай ее так же через LoadLibrary.
Чего там с логом? CAN-трафик видно хоть в каком-нибудь виде?
CoDeMasteR
Наступил я на какие-то грабли, только не могу понять где они.
Написал я отдельную DLL, экспортнул две функции. При загрузке DLL сделал:
Form1=new TForm1(Application->owner);
Form1->Show();
Но как только я вызываю экспортную функцию все виснет. Даже если функция без аргументов и ничего не делает. Если убираю Form1->Show(), то не виснет. Понимаю, что проблема стандартная, но куда копать пока не понял. Мож подскажешь?
Добавлено спустя 35 минут 28 секунд:
Да, про лог. Я чего-то вразумительного пока не видел, так как код был кривой. Надо все аккуратно сделать просто. Как только получу отпишу или здесь, или на почту.
Понимаю, что проблема стандартная, но куда копать пока не понял. Мож подскажешь?
Я C++ Builder видел всего один раз, и то первую версию под Win95. Скорее всего не запускается какой-то стартап код билдера, который обрабатывает Win32 MessageLoop. Вызов Show() в конечном счете выдает Win32 ShowWindowEx() который выдает в очередь соответствующий WM_SHOW, либо не в ту очереж, либо очередь ни кто не слушает. Как это победить - не знаю.
Вообще мысль соместить формы Tech2Win и монитора D-PDU API в одном процессе не очень мне нравится. Будет много гемора и сайд эффектов
Может проработать формат записи лога? А если надо видеть что происходит "на лету", то заменить файл на виндовый PIPE или MAILBOX и читать оттуда в форму.
Добавлено спустя 3 минуты 46 секунд:
Сообщение от AleXRE
Да, про лог. Я чего-то вразумительного пока не видел, так как код был кривой. Надо все аккуратно сделать просто. Как только получу отпишу или здесь, или на почту.
Мне бы примерчик работы с живым блоком. Первым этапом на его основе надо сделать заглушку, которая будет работать с Tech2Win без MDI. На ее основе уже можно вычленять трафик в CAN и прочие команды типа выбора шины.
Ладно, попробую тогда все же разобраться с записью в файл. Перепишу все заново. Теперь то я знаю с какими трудностями могу столкнуться и на след неделе, я думаю, у нас будет полный лог работы T2W, если я окончательно не разболеюсь
Ладно, попробую тогда все же разобраться с записью в файл.
В файл можно писать HexDump структур в памяти целиком, потом то же самое для каждого поля-указателя. Потом читать файл в отдельное приложение. Это позволит один и тот же прогон Tech2Win на железе анализировать разными методами (в GUI рисовать, в человеко-читаемый текст конвертить, считать статистику по вызовам и т.д.)
В имя файла можно добавить время и дату когда загрузилась DLL, что бы файлы от разных попыток не переписывали друг друга.
Не понял насчет HexDump. Как можно писать всю структуру, если не известно заранее размер данных, на которые ссылаются ее элементы-указатели. Приходится интерпретировать каждую структуру отдельно, так как там даже тип элементов меняется в зависимости от другого элемента. К примеру, смотри структуру PDU_PARAM_ITEM - очень злая.
Это векторы + структура-обертка с текущей и макс.длиной. Присылай исходник, попробую добавить их...
Сообщение от AleXRE
Пока не понял что делать с тагами
Их можно заюзать вместо таблицы CallBack, это увеличит производительность. А вообще на тэги можно забить до момента написания своей DLL для самодельного железа.
как их отследить не понятно. Сделать такую же таблицу для них?
какие значения hMod, hCLL возвращает оригинальная DLL? на что они больше похожи? на 1, 2, 3... или на адреса в памяти? от этого сильно зависит как делать callback.
Добавлено спустя 11 минут 55 секунд:
код для PDU_PT_BYTEFIELD, PDU_PT_STRUCTFIELD, PDU_PT_LONGFIELD выглядит примерно так:
ничего с ними не делаю, я пока Callback не наладил...
А вообще оригинальная ETAS-VCI.DLL уже давно в корзинке лежит, все запускается исключительно на моей самопальной реализации D-PDU API. Тэги буду передавать в Callback как написано в стандарте, не разбираясь что в них записано.
Сейчас копаюсь с вызовом Callback для CLL при переходе в статус ONLINE после PDUConnect.
Дмитрий 42
J2534 мы тоже пробовали, не работает Похоже поддержка этих устройств не доделана в Tech2Win. Известно что Tech2Win Toyota работает через J2534, но его найти пока не удалось.
Так 2 варианта. Ломаный Теч2вин или переводить дату на компе назад.
еще варианты:
3. Залить карту Tech2Win через GlobalTIS, дает лицензию 30 дней, кол-во заливок не ограничено.
4. Правка файла лицензии руками, как ни странно мне удалось с первого раза сделать 250 дней
4a. Генератор лицензии для Tech2Win пишется за 5 мин.
Лицензия на Tech2Win - не проблема ни разу, проблема - заставить его работать с машиной без дорогостоящего MDI.