Как использовать интерфейсы в скриптах
Добрый день,
Можно ли использовать интерфейсы (наследники от IUnknown) в скриптах?
Пытался зарегистрировать интерфейс через метод AddClass, но ничего не получилось. Компилятор выдает ошибку: [Error] MainFormUnit.pas(38): Incompatible types: 'TClass' and 'TGUID'
Привожу код, который я пытался использовать:
Что я делаю не так?
Я сейчас пытаюсь понять, подойдет ли мне FastScript и использование интерфейсов для меня очень важно.
Надеюсь на вашу помощь.
С уважением,
Михаил Третьяков
Можно ли использовать интерфейсы (наследники от IUnknown) в скриптах?
Пытался зарегистрировать интерфейс через метод AddClass, но ничего не получилось. Компилятор выдает ошибку: [Error] MainFormUnit.pas(38): Incompatible types: 'TClass' and 'TGUID'
Привожу код, который я пытался использовать:
unit MainFormUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
fs_iinterpreter, fs_ipascal, StdCtrls;
type
ITestInterface = interface(IUnknown)
['{352D3E1F-C08C-486F-8C56-35036D99F492}']
procedure TestMethod;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
fsScript: TfsScript;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
fsScript:= TfsScript.Create(Nil);
fsScript.Parent:= fsGlobalUnit;
fsScript.SyntaxType := 'PascalScript';
fsScript.AddClass(ITestInterface, 'IUnknown');
fsScript.Lines.Text:= 'begin ShowMessage(''Hello!''); end.';
if fsScript.Compile then
fsScript.Execute
else
ShowMessage(fsScript.ErrorMsg);
fsScript.Free;
fsScript:= Nil;
end;
end.
Что я делаю не так?
Я сейчас пытаюсь понять, подойдет ли мне FastScript и использование интерфейсов для меня очень важно.
Надеюсь на вашу помощь.
С уважением,
Михаил Третьяков
Комментарии
fsScript1.Variables := myIntf; // экземпляр интерфейса
скрипт:
myVar.testMethod;
Вызывается исключение "Invalid variant type convsion" внутри метода fsScript.Compile
Может ли так быть, что для работы вашего кода необходимо, чтобы интерфейс наследовался от IDispatch?
А если IDispatch не используется, т.е. интерфейс наследуется напрямую от IUnknown, то можно ли его все таки заставить работать в скриптах?
С уважением,
Михаил Третьяков
Может быть есть какой-то способ испльзования IUnknown-интерфейсов?
С уважением,
Михаил Третьяков