March 2021

S M T W T F S
 123456
78910111213
14151617181920
21222324252627
2829 3031   

Style Credit

Expand Cut Tags

No cut tags
Monday, November 8th, 2010 06:15 am

В процессе написания модуля «стыковки» FreePascal–Ruby возникла мысль сделать вызов Ruby-объектов через варианты (в настоящее время компилятор позволяет обращаться к методам и свойствам таковых). Однако, возникает вопрос, как это реализовать:

  1. Как это сделано в модуле ComObj для OLE-объектов + обертка, реализующая IDispatch. В этом случае не будет возможности использовать одновременно с самим ComObj, поскольку используется одна глобальная переменная из модуля Variants. В принципе, конечно, можно пропатчить ComObj, чтобы загнать в {$ifdef } все платформенно-зависимое, и использовать его, но это будет довольно грязный хак, который вряд ли примут в апстрим.
  2. Пойти через CustomVariant — т.е. допилить до рабочего состояния модуль Variants. Это можно (и нужно) сделать так, чтобы изменения были приняты. Против этого варианта, пожалуй, только то, что, как и всякий универсальный, он наиболее ресурсоемок. Как в плане трудозатрат, так и в плане использования — пара лишних вызовов на каждую операцию.
  3. Самый простой путь — поставить свой вариант DispInvoke в VariantManager. Недостаток — несовместимость уже с модулем Variants и всеми, что от него зависят. Правда, можно сохранять старое значение и вызывать его при необходимости. Тогда мой модуль должен быть обязательно подключен после Variants...
  4. Отложить идею с оберткой, пока не будет готов модуль Variants... Опционально — поныть в рассылке разработчиков FPC ;) Полагаю, это только на тот случай, если предыдущие окажутся недоступны (хотя недоступность третьего мне трудно себе представить...)

Идеи, советы, наводящий флейм?..

Reply

(will be screened)
(will be screened if not validated)
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting