1 / 1 / 0
Регистрация: 23.05.2012
Сообщений: 16
|
||||||
1 | ||||||
Ошибка ДЛЛ для связи весового контроллера с ПК23.05.2012, 11:09. Показов 3638. Ответов 36
Метки нет (Все метки)
Добрый день!
Передо мной поставлена задача написания программы для связи весового контроллера с ПК через СОМ-порт. Мне предоставлена готовая DLL-библиотека(без исходника) для связи с ПК с контроллером. Программа должна вести учет взвешиваний, но суть не в этом... Я никак не могу разобратться с DLL. То есть как бы все просто... Есть 3 функции для работы с весами(контроллером). Для регистрации весов, для получения мгновенного веса и для получения стабильного веса. С документации библотеки: Код компилируется. Проблема в том, что у меня постоянно выбивает ошибку памяти Access Violation at Adress... при обращении к функциям. Выбивает ошибку на переменной p_szErrorTextBuffer. И выбивает в основном на функции Scales_GetImmidiateWeightr(...). Вот кусок кода с функциями:
0
|
23.05.2012, 11:09 | |
Ответы с готовыми решениями:
36
Передача процессу функции внедрения длл через другую длл (Очень сложно и не понятно) Написание драйвера для терминала весового оборудования Подгрузка мануал мапом длл из другой длл нет связи контроллера Schleicher MCS 20-21 и терминальным эвм DEVIPC MSC Rechnerbox на линуксе |
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
|
|
23.05.2012, 12:59 | 2 |
вы должны передавать в функцию указатель на массив указанной (простите за каламбур) длины. если у вас заявлено p_uErrorTextBufferLegth = 100, то почему вы передаете указатель на пустую строку (LPSTR p_szErrorTextBuffer="")?
1
|
1 / 1 / 0
Регистрация: 23.05.2012
Сообщений: 16
|
|
23.05.2012, 13:38 [ТС] | 3 |
Потому что, как я понял, эту строку должна формировать непосредственно функция самой ДЛЛ библиотеки, указывая на причину ошибки, если таковая есть.
Добавлено через 6 минут
0
|
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
|
|
23.05.2012, 16:22 | 4 |
она и формирует. в предоставляемом вами буфере. а если вы ей не даете этот буфер она пишет данные непойми куда (туда куда указывает указатель) полагая что на том месте лежит массив длиной в 100 байт. при этом естественно будет ошибка доступа.
1
|
1 / 1 / 0
Регистрация: 23.05.2012
Сообщений: 16
|
|||||||||||
23.05.2012, 22:19 [ТС] | 5 | ||||||||||
LPSTR p_szErrorTextBuffer - это мой буфер... Я его указал в парамнтрах функций.
Добавлено через 28 минут Прописал все таки массив.
Но на функции получения веса:
0
|
Практикантроп
4824 / 2717 / 525
Регистрация: 23.09.2011
Сообщений: 5,777
|
|
23.05.2012, 22:36 | 6 |
все-таки меня очень интересует такая деталь: как с одним DLL Вы построили проект с использованием функций этой библиотеки? Можно вкратце... - извлекали LIB, создавали соотв. H файл... - как?!
0
|
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
|
|
24.05.2012, 09:21 | 7 |
конечно ваш буфер. поэтому он и должен быть выделен вами. функция его не выделяет. во всяком случае я догадываюсь об этом исходя из того что в функцию передается указатель и длинна буфера (если бы выделение памяти под строку ошибки делала функция она принимала бы в качестве параметра указатель на указатель и длина была бы ей не нужна). длина буфера передаваемая в функцию соответствует его фактической длине? то есть не так что бы массив длиной 50 а передаете в функцию длину 100?
1
|
1 / 1 / 0
Регистрация: 23.05.2012
Сообщений: 16
|
|||||||||||||||||||||
24.05.2012, 11:29 [ТС] | 8 | ||||||||||||||||||||
nick42, да, в Import Type Librrary я добавил DLL. Клас Scales появился. Так же в дистрибутиве библиотеи имелись Хэдер-файли для С++. Вот их "начинка":
ScalesLib.h
Так же в дистрибутиве ДЛЛ имеется пример на VBS, который работает, лично проверял.
0
|
Практикантроп
4824 / 2717 / 525
Регистрация: 23.09.2011
Сообщений: 5,777
|
||||||
24.05.2012, 12:06 | 9 | |||||
я изменил вот так: __
0
|
1 / 1 / 0
Регистрация: 23.05.2012
Сообщений: 16
|
|
24.05.2012, 12:19 [ТС] | 10 |
При компиляции, после вызова процедуры, программа создает какое-то окно и зависает, компилятор даже не выдает причин ошибки. Должен уходить, вечером отпишу еще, дам скрин. За помощь пока огромное спасибо!
0
|
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
|
|
24.05.2012, 13:08 | 11 |
если нам не интересна детализация ошибки допускается ли передача в качестве буфера NULL?
0
|
1 / 1 / 0
Регистрация: 23.05.2012
Сообщений: 16
|
|
24.05.2012, 20:46 [ТС] | 13 |
http://ifolder.ru/30694226 - тут библиотека и документация и примеры.
Правда документация на украинском, но гугл транслейт, если что, переведет все без проблем Добавлено через 1 минуту vxg, При НУЛЛ тоже ошибка памяти Аксесс Виолейшн..
0
|
24.05.2012, 23:53 | 14 |
TC, не смешно.
1- там exe-ник в RAR-е ...проверять, что это самораспаковующийся архив, да на вирусы неохота 2- архивы и картинки принято прикладывать в теме, а не на файлопомойках ...это еще местный модератор сквозь пальцы смотрит, а я пока сомневаюсь, переносить ли тему к себе в раздел или нет p.s.: а не подумывали напрямую поработать с весами, минуя DLL-ку? Обмен с ними обычно в аски, включаем утилиту от производителя, ведь должна быть тестовая, снифферим portmon и выделяем запросы, после формируем такие же у себя. Это опять лирическое отступление, доков я пока не увидел.
0
|
Практикантроп
4824 / 2717 / 525
Регистрация: 23.09.2011
Сообщений: 5,777
|
|
25.05.2012, 01:09 | 15 |
Ваш проект на BCB 6.0 у меня скомпилировался без ошибок и запускается тоже нормально ("проект", конечно, с единственной кнопкой). К проекту подключил библиотеку ScalesDll.lib , но ее пришлось переконвертировать программой coff2omf.exe. Убедиться в работоспособности, понятно, не могу, так как не имею соотв. устройства, да и не вникал в смысл этой библиотеки. Во всяком случае пока никакого обращения к порту СОМ не происходит (да и не должно, мне кажется; все-таки эти Н-файлы неполноценные какие-то; к DLL обращения тоже не происходит. Разбираться надо...).
0
|
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
|
|
25.05.2012, 09:22 | 16 |
у меня проходит регистрацию и падает на Scales_GetImmediateValue с сообщением "обратилась к адресу 0". звонить кулибину не пробывали?
0
|
1 / 1 / 0
Регистрация: 23.05.2012
Сообщений: 16
|
|
25.05.2012, 12:10 [ТС] | 17 |
raxp, разработка местного программиста, потому и на украинском язіке. Основные аспекты я перевел в одном с предыдущих постов. Если нужно, переведу все.
Прощу прощения за несоответствие неких правил форума, ссылок и т.п. Исправлюсь. На прямую не пробовал. К сожалению, особых идей нету. Связь с контроллером можно вести через Hyper Terminal. Это к слову. raxp, да, я тоже конвертировал. Извините, что забыл это указать. Кстати долго мучился. vxg, вот и у меня аналогичная ошибка памяти, которая и стала причиной создания поста.
0
|
Практикантроп
4824 / 2717 / 525
Регистрация: 23.09.2011
Сообщений: 5,777
|
||||||
25.05.2012, 18:04 | 18 | |||||
И все же "другие путя" есть! Похоже, что вся поддержка разрабатывалась на ВизуалВасике, и заголовочный файл оттуда; напрямую в Билдер эту петрушку не перетащишь. Но вот если в Билдере открыть ScalesAx.dll и затем сохранить его как tlb (а это оно и есть...); потом найти в панели кнопочку Register Type Library и нажать, то потом можно проделать следующее: в Project - Import Type Library выбираем "ScalesAx 1.0 Type Library" (она должна там появиться) , указываем тип закладки Samples (или система сама это сделает) - и в этой вкладке появляются два новых компонента: Scales и ScalesSafe. Остается установить их (или его) на форму и начать с ними работать. Вот код на кнопку, который компилируется и даже работает:__
(Windows 7 32 ultim. BCB 5.0 )
0
|
Практикантроп
4824 / 2717 / 525
Регистрация: 23.09.2011
Сообщений: 5,777
|
|
26.05.2012, 23:29 | 20 |
Сегодня попробовал и на RAD XE2; похоже - работает (правда, похоже ТС ушел искать счастья в другие палестины; или таки добился работы с той длл-кой). Достаточно установить Scales v1.08 и затем добавить из Import a type library те пару компонентов (см.выше). Во всяком случае сообщения об ошибке подключения программа получает из той злополучной DLL.
0
|
26.05.2012, 23:29 | |
26.05.2012, 23:29 | |
Помогаю со студенческими работами здесь
20
Внутреняя ошибка связи или нет связи с удалённым сервером Cтранная ошибка в подключении длл (char, wchar_t) Можно с ДЛЛ для MSVC 6 работать из С++ для Нета ? CDialogEx + dll, После завершения модального диалога (CDialogEx) из длл-библиотеки работа длл-библиотеки прерывается Не работает программа для загрузки длл Редактирование платного длл чита ( для варфейс ) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |