Страница 2 из 2
Event от внешней библиотеки
Добавлено: 10 Декабрь 2015, 17:04
Дед Пахом
я бы заменил *cstring uri2 в прототипе на long url2, и юзал memcpy. Подозреваю, что невозможность объявить атрибут RAW у клашиной процедуры здесь как раз узкое место.
Event от внешней библиотеки
Добавлено: 10 Декабрь 2015, 17:21
Дед Пахом
не, не вариант, для memcpy нужен размер строки. Может так?
Код: Выделить всё
slen long, auto
saddr long, auto
slen = len(url2)
saddr = address(url2)
memcpy(address(callurl), saddr, slen)
Event от внешней библиотеки
Добавлено: 10 Декабрь 2015, 17:25
Дед Пахом
а хотя... с прототипом "long url2":
Код: Выделить всё
sref &cstring
sref &= (url2)
slen = len(sref)
memcpy(address(callurl), url2, slen)
Event от внешней библиотеки
Добавлено: 10 Декабрь 2015, 17:53
RaFaeL
Через указатель валится уже на sref &= (url2)
Просто через memcpy работает, но действительно нужна длина. Т.е. если взять например 80 то будет с запасом и по шаблону лишнее обрезать. Насколько вероятность большая что это приведет к чему-то неприятному?
Event от внешней библиотеки
Добавлено: 10 Декабрь 2015, 22:02
RaFaeL
Вот так работает
Код: Выделить всё
my_callincoming procedure(LONG l1, long uri2)
code
call1=l1
calllong=uri2
slen = strlen(uri2)
memcpy(address(calluri), calllong, slen)
return 0
Event от внешней библиотеки
Добавлено: 10 Декабрь 2015, 22:27
Yufil
Попробуй вместо процедур передавать их адреса.
Код: Выделить всё
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))
Event от внешней библиотеки
Добавлено: 10 Декабрь 2015, 23:12
RaFaeL
Сделал так, упростило код но фрагменту со строкой не помогло )) Оставлю пока через strlen
Event от внешней библиотеки
Добавлено: 11 Декабрь 2015, 10:19
Yufil
Там могут быть проблемы с управлением памятью, в том числе и для строк.
Перед вызовом программы на сях надо вызвать Unlockthread, а внутри обработчика сначала сказать Lockthread, а на выходе снова Unlockthread, может быть, после этого и прокатит. Или не...
Event от внешней библиотеки
Добавлено: 11 Декабрь 2015, 11:55
RaFaeL
Выяснил, что внутри обработчика не работают никакие кларионовские процедуры (кроме присваивания переменных), сразу вылет. При этом strlen и memcpy работают