Event от внешней библиотеки
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Дед Пахом
- Старичок
- Сообщения: 3289
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
- Контактная информация:
Event от внешней библиотеки
я бы заменил *cstring uri2 в прототипе на long url2, и юзал memcpy. Подозреваю, что невозможность объявить атрибут RAW у клашиной процедуры здесь как раз узкое место.
С уважением, ДП
- Дед Пахом
- Старичок
- Сообщения: 3289
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
- Контактная информация:
Event от внешней библиотеки
не, не вариант, для memcpy нужен размер строки. Может так?
Код: Выделить всё
slen long, auto
saddr long, auto
slen = len(url2)
saddr = address(url2)
memcpy(address(callurl), saddr, slen)
С уважением, ДП
- Дед Пахом
- Старичок
- Сообщения: 3289
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
- Контактная информация:
Event от внешней библиотеки
а хотя... с прототипом "long url2":
Код: Выделить всё
sref &cstring
sref &= (url2)
slen = len(sref)
memcpy(address(callurl), url2, slen)
С уважением, ДП
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
Event от внешней библиотеки
Через указатель валится уже на sref &= (url2)
Просто через memcpy работает, но действительно нужна длина. Т.е. если взять например 80 то будет с запасом и по шаблону лишнее обрезать. Насколько вероятность большая что это приведет к чему-то неприятному?
Просто через memcpy работает, но действительно нужна длина. Т.е. если взять например 80 то будет с запасом и по шаблону лишнее обрезать. Насколько вероятность большая что это приведет к чему-то неприятному?
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
Event от внешней библиотеки
Вот так работает
Код: Выделить всё
my_callincoming procedure(LONG l1, long uri2)
code
call1=l1
calllong=uri2
slen = strlen(uri2)
memcpy(address(calluri), calllong, slen)
return 0
Event от внешней библиотеки
Попробуй вместо процедур передавать их адреса.
Код: Выделить всё
SIP_onRegStateCallback(Long),Long,RAW,C,name('onRegStateCallback')
SIP_onCallStateCallback(Long),long,RAW,C,name('onCallStateCallback')
...
SIP_onRegStateCallback(ADDRESS(my_regstate))
SIP_onCallStateCallback(ADDRESS(my_callstate))
SIP_onCallIncoming(ADDRESS(my_callincoming))
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
Event от внешней библиотеки
Сделал так, упростило код но фрагменту со строкой не помогло )) Оставлю пока через strlen
Event от внешней библиотеки
Там могут быть проблемы с управлением памятью, в том числе и для строк.
Перед вызовом программы на сях надо вызвать Unlockthread, а внутри обработчика сначала сказать Lockthread, а на выходе снова Unlockthread, может быть, после этого и прокатит. Или не...
Перед вызовом программы на сях надо вызвать Unlockthread, а внутри обработчика сначала сказать Lockthread, а на выходе снова Unlockthread, может быть, после этого и прокатит. Или не...
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
Event от внешней библиотеки
Выяснил, что внутри обработчика не работают никакие кларионовские процедуры (кроме присваивания переменных), сразу вылет. При этом strlen и memcpy работают