Новости

Как правильно применять в JavaScript асинхронные функции: примеры работы с ES 2017
От автора: возможность писать на JavaScript асинхронные функции является важным обновлением в ES2017. Что такое асинхронные функции? Асинхронные функции — это функции, которые возвращают promise. Мы

WordPress JavaScript — как правильно подключить файл скрипта к шаблону сайта
Использование в шаблонах WordPress JavaScript скриптов давно стало обычным делом. Их подключение возможно несколькими способами, начиная с классического варианта с использование голого HTML. Но чтобы все

Как исправить JavaScript error "ВКонтакте"? Что делать при ошибках JavaScript в "ВКонтакте"?
"ВКонтакте" - это на сегодняшний день самый удобный русскоязычный ресурс, который является не только популярнейшей социальной сетью, но и сервисом для прослушивания аудиозаписей и просмотра видео. Здесь

Правильное использование Tor Browser
Tor Browser полностью анонимен – Миф или реальность? Многие считают, что Tor — это полностью анонимное и безопасное средство для интернет-серфинга, которое не дает никому возможность контролировать то,

Javascript error object is not a function вконтакте как исправить
"ВКонтакте" - это на сегодняшний день самый удобный русскоязычный ресурс, который является не только популярнейшей социальной сетью, но и сервисом для прослушивания аудиозаписей и просмотра видео. Здесь

Как исправить ошибку javascript error вконтакте
На сегодняшний день «Вконтакте» является наиболее удобным русскоязычным ресурсом, который представляет собой не только крупнейшую социальной сеть, но и сервис для просмотра видео и прослушивания аудиозаписей.

Что такое JavaScript и для чего он используется?
Подробности декабря 10, 2015 Просмотров: 20225 В интернете миллионы веб-страниц,

Практика javascript синтаксис написания
Javascript — это язык программирования, который активно используется для построения динамических веб страниц. Собственно с этой целью он и был изобретен. У нашего с вами языка еще есть такое интересное

JavaScript учебник
Код функций в JavaScript начинает выполнение после их вызова. Функции являются одним из наиболее важных строительных блоков кода в JavaScript. Функции состоят из набора команд и обычно выполняют

Рекомендации решившим начать изучать JavaScript
Если вы решили начать изучать JavaScript , то эта статья для вас. Надеюсь, что её прочтение избавит вас в будущем от множества ошибок и сделает его изучения более простым, быстрым и эффективным. В статье

1с - IDispatch GetIDsOfNames в Delphi - Stack Overflow на русском

Опубликовано: 01.09.2018

Имеется код для подключения к базе 1С-предприятие 8.3 и выполнения в ней функции Тест1(5, 2).

var pDisp : IDispatch; sMethodName : Widestring; iDispId : TDispId; dpPutArgs : TDispParams; ei : TExcepInfo; iError : uint; vSet : olevariant; vParams : array [1..63] of olevariant; VarResult : OleVariant; function_1c : AnsiString; begin pDisp := CreateOleObject('V83.Application'); sMethodName := 'Connect'; OleCheck (pDisp.GetIDsOfNames (GUID_NULL, @sMethodName, 1, LOCALE_SYSTEM_DEFAULT, @iDispId)); vSet := 'File=C:\Users\Admin\Documents\InfoBase'; FillChar (dpPutArgs, sizeof (dpPutArgs), 0); dpPutArgs.rgvarg := @vSet; dpPutArgs.cArgs := 1; dpPutArgs.cNamedArgs := 0; dpPutArgs.rgdispidNamedArgs := nil; OleCheck (pDisp.Invoke (iDispId, GUID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, dpPutArgs, @VarResult, @ei, @iError)); function_1c := 'Тест1'; sMethodName := function_1c; OleCheck (pDisp.GetIDsOfNames (GUID_NULL, @sMethodName, 1, GetThreadLocale, @iDispId)); vParams[1] := 2; vParams[2] := 5; FillChar (dpPutArgs, sizeof (dpPutArgs), 0); dpPutArgs.rgvarg := @vParams; dpPutArgs.cArgs := 2; dpPutArgs.cNamedArgs := 0; dpPutArgs.rgdispidNamedArgs := nil; OleCheck (pDisp.Invoke (iDispId, GUID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, dpPutArgs, @VarResult, @ei, @iError)); pDisp := UnAssigned; end;

Проблема заключается в том, что необходимо вместо V83.Application использовать V83.COMConnector . Если просто изменить одну строчку кода, то, при попытке получить идентификатор функции на втором GetIdsOfNames, программа сообщает об ошибке "Неизвестное имя" . Пробовал вводить английское имя функции (Test), ошибка оставалась.

Склоняюсь думать, что GetidsOfNames не понимает кодировку строки "Тест1". Даже при V83.Application приходиться использовать костыль в виде преобразования AnsiString в WideString перед получением идентификатора (SMethodName := function_1c).

Также я пробовал, вместо позднего связывания, чётко прописать в коде функцию на выполнение, а потом смотрел какие системные интерфейсы дёргаются при таком варианте. Всё сходится, как и в коде выше: сначала GetidsOfNames, а потом Invoke.

OLE_obj := CreateOleObject('V83.COMConnector'); OLE_obj := OLE_obj.Connect('File=C:\Users\Admin\Documents\InfoBase'); ansver := OLE_obj.Тест1(2, 5);

P.S. Использую Delphi-XE3, 1С-Предприятие 8.3. В базе данная функция находиться в глобальном общем модуле, выставлены все галочки для клиент-серверного взаимодействия, сама функция Тест1 является экспортируемой.

rss