Передача параметров в OLE посредством BIND

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
vassilio
Новичок
Сообщения: 6
Зарегистрирован: 22 Февраль 2009, 3:12

Передача параметров в OLE посредством BIND

Сообщение vassilio »

Раньше никогда не сталкивался, поскольку использовал передачу параметров по значению и обходился обычным связыванием их в строку:
?Ole{'Command(' & X & ',' & Y & ',' & Z & ')'}
Однако, потребовалось мне тут загонять их по ссылке. Воспользовался предварительным BINDом, как это описано в хэлпе "Parameter Passing to OLE/OCX Methods"- ничего не получилось.
Для теста попробовал испытать этот самый bind-метод и при передаче по значению - опять-таки, не работает :(
Никто не подскажет, чей это глюк - clarion, ole или мой? И как его можно перебороть.
(использую С 6.3)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Передача параметров в OLE посредством BIND

Сообщение Yufil »

По-моему, речь не идёт о передаче по ссылке. В ряде случаев просто невозможно подставить значение (например, если оно содержит запятую, пробел или кавычки), поэтому и приходится использовать такой механизм.
Аватара пользователя
vassilio
Новичок
Сообщения: 6
Зарегистрирован: 22 Февраль 2009, 3:12

Re: Передача параметров в OLE посредством BIND

Сообщение vassilio »

Необходимость (как единственная возможность сделать это языковыми средствами Clarion) возникает, всё ж, именно при передаче параметра в OLE по ссылке.
Но это не суть важно: факт, что этот bind-механизм у меня почему-то не пашет -- "разименовывания" забинденных переменных в ?Ole{ } не происходит
:(.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Передача параметров в OLE посредством BIND

Сообщение Дед Пахом »

а код привести Заратустра не позволяет?
С уважением, ДП
Аватара пользователя
vassilio
Новичок
Сообщения: 6
Зарегистрирован: 22 Февраль 2009, 3:12

Re: Передача параметров в OLE посредством BIND

Сообщение vassilio »

Дед Пахом писал(а):а код привести Заратустра не позволяет?
Код - ничем не отличается от того, что приведён в документации, типа

Код: Выделить всё

data
Buffer         string(4096)
BufferSize   long(size(Buffer))
code
  ...
  ...
  bind('Buffer', Buffer)
  bind('BufferSize', BufferSize)
  ReadingByts# = ?OLE{ 'Read(&Buffer, BufferSize)' }
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Передача параметров в OLE посредством BIND

Сообщение WadimZapara »

Может, нужно проверить:
1) порядок параметров метода,
2) нужное их количество,
3) возможность передачи по значению второго параметра,
4) а тот ли метод.
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Аватара пользователя
vassilio
Новичок
Сообщения: 6
Зарегистрирован: 22 Февраль 2009, 3:12

Re: Передача параметров в OLE посредством BIND

Сообщение vassilio »

Спасибо, но Вы забыли указать ещё один важный пункт:
"5. Проверьте, а не затесалась ли у вас где русская буковка "с" вместо латинской "c" ;)))
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Передача параметров в OLE посредством BIND

Сообщение WadimZapara »

Так помогло? Рад. :D
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Аватара пользователя
vassilio
Новичок
Сообщения: 6
Зарегистрирован: 22 Февраль 2009, 3:12

Re: Передача параметров в OLE посредством BIND

Сообщение vassilio »

К сожалению, не помогло (это я так, злобствую: ну, там же крайне сложно запутаться, когда передаётся всего один параметр).
На самом деле, натыкался где-то здесь, в форуме, что кто-то уже сталкивался с подобной проблемой. Видимо, дело, всё ж, в Clarion (что довольно странно, поскольку SV сейчас усиленно рекламирует свой продукт именно как хорошую "связку" для всяких там ActiveX-Ole.)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8029
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Передача параметров в OLE посредством BIND

Сообщение Игорь Столяров »

vassilio писал(а):(что довольно странно, поскольку SV сейчас усиленно рекламирует свой продукт именно как хорошую "связку" для всяких там ActiveX-Ole.)
Привет !

Как говорится: есть ложь, есть наглая ложь и есть заявления SoftVelocity (особенно по C7) ... :wink:

Но если честно - я такого заявления никогда не слышал. Интерфейс Clarion по работе с OLE & ActiveX изначально был "притянут за уши" в синтаксис языка и сделано это было, пардон, но через жо ... у. Базовые проблемы и их "решения" описаны в справке по Clarion. Сталкивался с этим неодноднократно - например так и не удалось сделать прямое взаимодействие через ActivX с библиотекой шифрования MS Capicom - хотя времени и сил было потрачено значительно больше чем нужно ... :( (пришлось сделать через генерацию VBS скрипта и его выполнения в фоновом режиме - не дай бог заказчик узнает) и т.д. и т.п. Поэтому если, что-то не получается - не грусти, это тот случай когда дело именно в бобине, а не в том, кто сидит в кабине ... ;)
Make Clarion Great Again ! 😎
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Передача параметров в OLE посредством BIND

Сообщение WadimZapara »

vassilio писал(а):К сожалению, не помогло (это я так, злобствую: ну, там же крайне сложно запутаться, когда передаётся всего один параметр).
Извини всё же: в твоём примере выше указано:
ReadingByts# = ?OLE{ 'Read(&Buffer, BufferSize)' }
Как бы, очень кажется, что второй параметр тоже должен быть по ссылке - размер записанного в буфер!
Может попробовал-бы...
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Передача параметров в OLE посредством BIND

Сообщение Дед Пахом »

Размер входного буфера никогда по ссылке не передаётся. В крайнем случае (при изменении размера буфера внутри метода) метод возвращает новый размер через return или через другой аргумент.
С уважением, ДП
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Передача параметров в OLE посредством BIND

Сообщение Yufil »

Кстати, а почему не 'Read(&Buffer,&Buffersize)' ?
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Передача параметров в OLE посредством BIND

Сообщение WadimZapara »

Дед Пахом писал(а):Размер входного буфера никогда по ссылке не передаётся.
Вернее было бы сказать "обычно по ссылке не передаётся". Ведь нам неизвестно какой OLE использован. По-моему, в каком-то методе Active Directory присутствует именно такой вариант, что в параметр, передаваемый по ссылке, в метод - передаётся размер буфера, и в него же - методом возвращается - число записанных байт. Сейчас не уточню, какой именно... :wink:
Может предложим автору раскрыть тайну, что именно за OLE ?
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Передача параметров в OLE посредством BIND

Сообщение WadimZapara »

Дед Пахом писал(а):Размер входного буфера никогда по ссылке не передаётся. В крайнем случае (при изменении размера буфера внутри метода) метод возвращает новый размер через return или через другой аргумент.
Вот и попалось опровержение:

BOOL WINAPI LookupAccountName(
__in_opt LPCTSTR lpSystemName,
__in LPCTSTR lpAccountName,
__out_opt PSID Sid,
__inout LPDWORD cbSid,
__out_opt LPTSTR ReferencedDomainName,
__inout LPDWORD cchReferencedDomainName,
__out PSID_NAME_USE peUse
);

cbSid [in, out] - A pointer to a variable. On input, this value specifies the size, in bytes, of the Sid buffer. If the function fails because the buffer is too small or if cbSid is zero, this variable receives the required buffer size.

cchReferencedDomainName [in, out] - A pointer to a variable. On input, this value specifies the size, in TCHARs, of the ReferencedDomainName buffer. If the function fails because the buffer is too small, this variable receives the required buffer size, including the terminating null character. If the ReferencedDomainName parameter is NULL, this parameter must be zero.
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Ответить