v8: ВК NativeAPI и Delphi - Invalid pointer operation #603526


#0 by igor_kav
Для написания ВК использую NativeAPI (. Пару функций удалось сделать и использовать в 1С, но написал третью функцию в dll... при попытке использования в 1с именно этой третьей функции, 1с вылетает с ошибкой "Программа 1Сv8 не работает Возникшая проблема привела к прекращению работы программы. бла-бла". Самое интересное, что для тестирования создал проект VLC на delphi, поместил в него код функции. В VLC-проекте ФУНКЦИЯ РАБОТАЕТ! Поставил исключение в процедуре _CallAsFunc и получил ошибку: Внешняя компонента : Invalid pointer operation. Ошибка! {Форма.Форма.Форма}: Ошибка при вызове метода контекста (ПолучитьМоиДанные): Ошибка внешней компоненты Прочитал, что СКОРЕЕ ВСЕГО УТЕЧКА ПАМЯТИ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ STRING, но как решить ума не приложу... Кто сталкивался, ПОМОГИТЕ!
#1 by igor_kav
type    function doLogin(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer): boolean;    function getMyData(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer): boolean; function TMyClass.doLogin(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer): boolean; var    (RIO as AllegroWebApiPortType).doQuerySysStatus(local_version, country_id, webapi_key, info, ver_key);    (RIO as AllegroWebApiPortType).doLogin(user_login, user_password, country_id, webapi_key, ver_key, session_handle_part, user_id, server_time); function TMyClass.getMyData(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer): boolean; var    (RIO as AllegroWebApiPortType).doGetMyData(session_handle_part, user_data, invoice_data, company_extra_data, function TMyClass.getCatsList(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer): boolean; var    (RIO as AllegroWebApiPortType).doGetCatsData(country_id, local_version, webapi_key, cats_list, ver_key, ver_str); begin end. [/code]
#2 by igor_kav
type    function doLogin(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer): boolean;    function getMyData(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer): boolean; function TMyClass.doLogin(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer): boolean; var    (RIO as AllegroWebApiPortType).doQuerySysStatus(local_version, country_id, webapi_key, info, ver_key);    (RIO as AllegroWebApiPortType).doLogin(user_login, user_password, country_id, webapi_key, ver_key, session_handle_part, user_id, server_time); function TMyClass.getMyData(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer): boolean; var    (RIO as AllegroWebApiPortType).doGetMyData(session_handle_part, user_data, invoice_data, company_extra_data, function TMyClass.getCatsList(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer): boolean; var    (RIO as AllegroWebApiPortType).doGetCatsData(country_id, local_version, webapi_key, cats_list, ver_key, ver_str); begin end.
#3 by igor_kav
не могу нормально скопировать код ВК. вот ссылка на комментарии к NativeApi , там есть мой код ВК
#4 by romix
Вот еще дельфийский пример
#5 by igor_kav
Я смотрел Вашу работу, от туда и взял код на обработку исключения :), но увы, смог выявить только ошибку, а вот как ее исправить ума не приложу. Что можете посоветовать?
#6 by romix
Попробуйте ее как шаблон использовать - там больше функций, и я что-то исправлял (уже не помню что).
#7 by romix
Т.е. не меняя числа функций - а то может где-то чего-то забыли там изменить под новое число функций.
#8 by vmv
1С очень критичка к г-коду самопальных библиотек, ведь разработчики платформы далеко не глупы
#9 by igor_kav
Взял полностью Ваш переработанный модуль v8napi, то теперь 1С вываливаентся при вызове любой функции :(
#10 by igor_kav
Отладчиком выявил ошибку "External exception C000001D" в строке: (RIO as AllegroWebApiPortType).doGetMyData(session_handle_part, user_data, invoice_data, company_extra_data, company_second_address, pharmacy_data, alcohol_data, related_persons); Но только в DLL, в EXE все нормально работает. В чем же все-таки причина?
#11 by H A D G E H O G s
Фиг тя знает.. ЗначениеИзСтрокиВнутр - фиии, реальне пацаны юзают XDTO. У меня даже объекты для формирования строкого возврата Массива, СпискаЗначений и Структуры есть. Вот темка:
#12 by H A D G E H O G s
Вообще - ужастный адскый код.
#13 by H A D G E H O G s
THTTPRIO - че за зверь, неужели типовые Indyйцы не устаривают?
#14 by igor_kav
THTTPRIO использую для работы с веб-сервисом, одно непонятно почему в EXE работает, а вот в DLL ну НИКАК?
#15 by H A D G E H O G s
Попробуй тупо после try, Перед (RIO as AllegroWebApiPortType).doGetMyData(.... написать CoInitializeEx(nil, COINIT_MULTITHREADED);
#16 by igor_kav
попробовал, результат нулевой :( Какие еще будут варианты?
#17 by romix
Вариант - взять работающую DLL и не меняя  в ней число функций запустить в одной из них свою требуемую функцию. Тогда станет ясно в чем проблема - в коде обвязки или в коде функции. Или наоборот - заменить содержимое своей функции на что-то нейтральное типа sleep или MessageBox, и посмотреть а будет ли работать так. Если нет то неправильно написана обвязка, если да - то пошагово проверять свою функцию (например повтыкать везде MessageBox-ы для отладки, на каком споткнется там и ошибка.
#18 by igor_kav
Как передать функции XDTO пакет (ТаблицаЗначений), а потом его в delphi разобрать?
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С