:: Visual Foxpro, Foxpro for DOS
вызов метода ActiveX-контрола с параметром по ссылке
andrewk
Автор

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
Поиск здесь показал, что проблема возникала в разное время. Только выход из ситуации так и не ясен. Упоминалась статья kb177575, но сейчас msdn её не показывает.
Собственно проблема. Есть ActiveX-контрол. У него некоторые методы вызываются с передачей параметров по ссылке. Вернее, результат возвращается в параметре, переданном по ссылке. Пример из документации в ситаксисе Visual Basic:
fpSpread.GetText(ByVal Col As Long, ByVal Row As Long, Var As Variant) As Boolean
Col - Column number of cell
Row - Row number of cell
Var - Text in cell
То есть, в третьем параметре он должен вернуть строку. Там не мегабайты, несколько символов.
Однако при вызове метода возникает ошибка. На любой из вариантов:
qq = Space(4096)
qq = Replicate(Chr(0), 4096)
qq = ""
qq = 0
qq = 0.0
qq = .null.
Dimension qq(1)
qq[1] = ''
Dimension qq(100)
qq = Space(100)
потом .GetText(2,4,@qq) выдаёт "OLE error 0x80020005: type mismatch".
Причём, на такое:
Dimension aa(1) as Byte
aa[1] = ''
? .GetText(2,4,@aa)
вылазит уже не OLE-error, а фоксовый "Function argument value, type, or count is invalid". Разные варианты ComArray() никак не влияют.
Как бы это побороть?



Исправлено 1 раз(а). Последнее : andrewk, 26.12.17 23:52
Ratings: 0 negative/0 positive
Re: вызов метода ActiveX-контрола с параметром по ссылке
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Если в декларации функции НЕ указано явно ByRef, то параметры передаются по значению вообще то.
Нужно через OleView посмотреть как на самом деле декларирована данная функция, какой там тип параметра. Если это таки "ссылка на Variant" (передаваемый по ссылке, либо являющийся out параметром), то без создания вспомогательной dll/fll скорее всего не обойтись будет.
Статью MSKB, хотя она и относится формально к фоксу 5/6 версии, можно почитать вот тут


------------------
WBR, Igor
Ratings: 0 negative/1 positive
Re: вызов метода ActiveX-контрола с параметром по ссылке
andrewk
Автор

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
Вот что показывает OleView:
[id(0x000000fc), helpstring("Returns the text of the specified cell."), helpcontext(0x0000178c)]
VARIANT_BOOL GetText(
long Col,
long Row,
VARIANT* Var);
Или я не там смотрю?
Ratings: 0 negative/0 positive
Re: вызов метода ActiveX-контрола с параметром по ссылке
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Там. Это именно та самая "плохая" ссылка на Variant. Чисто силами фокса это победить нельзя, насколько я понимаю. Возможно, используя АПИ и ассемблерные вставки (т.к. ком-контроллер фокса не сможет передать параметром "адрес Variant-а", даже если через АПИ функции и создать нужный объект/структуру Variant)...
Но проще таки на другом языке сделать обёртку. На каком именно - зависит от имеющихся навыков. Полагаю что на C это было бы оптимально (в виде того же fll - для вообще "прозрачной" интеграции с фоксом), но можно и на C# и даже на "классическом" VB...


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 27 (Гостей: 27)

© 2000-2024 Fox Club 
Яндекс.Метрика