Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Использование Microsoft ScriptControl


Дмитрий_А ©   (2006-03-23 09:02:00) 

Господа, подскажите, как правильно пользоваться MS Script Control.
На VBScript написана функция

Sub OutError(s1, s2)
 s2="New Value"
End Sub


Пытаюсь через MS Script Control передать в нее параметры и получить измененные значения.
Передавать получается, а вот получить измененные - нет.
Привожу код ниже:

var
Script : IScriptControl;  
v : OleVariant;
vaResult : OleVariant;
P : PSafeArray;
begin
 Script := CreateOleObject('MSScriptControl.ScriptControl') as IScriptControl;
 Script.Language:='VBScript';
 Script.UseSafeSubset:=False;
 Script.AddCode(Memo1.Lines.Text);
   v := VarArrayCreate([0, 1], varVariant);
   v[0] := '1111';
   v[1] := '2222';
   P:= PSafeArray(TVarData(v).VArray);
   vaResult := Script.Run('OutError', P);

  ShowMessage(v[1]); // Вот тут старое значение '2222', а не 'New Value' !!!!

 Script := nil;
end;


Подскажите, что делаю не так.


Сергей М.   (2006-03-23 11:04:00) [1]


> Дмитрий_А   (23.03.06 10:29) [6]


Ну это же не VB, где параметры можно передавать по ссылке ..


Дмитрий_А   (2006-03-23 10:29:00) [2]

2 Сергей М. ©   (23.03.06 09:36) [5]
Не получится.

Это точно?


Сергей М.   (2006-03-23 09:36:00) [3]


> Дмитрий_А   (23.03.06 09:29) [4]


Не получится.


Дмитрий_А   (2006-03-23 09:29:00) [4]

2 Сергей М. ©   (23.03.06 09:19) [3]

Спасибо конечно ...

НО.
Интересует именно входной-выходной параметр процедуры(или функции), а НЕ возвращаемое значениефункции.

Вопрос в силе.


Сергей М.   (2006-03-23 09:19:00) [5]

Function OutError(s1)
OutError = "OutErrorResult " + s1
End Function


Сергей М.   (2006-03-23 09:19:00) [6]

Вот так еще проще:

procedure TForm1.Button1Click(Sender: TObject);
var
 Script, vaResult : OleVariant;
begin
Script := CreateOleObject('MSScriptControl.ScriptControl');
Script.Language:='VBScript';
Script.UseSafeSubset:=False;
Script.AddCode(Memo1.Lines.Text);
vaResult := Script.Run('OutError', '1111');
ShowMessage(vaResult);
Script := Null;
end;


Сергей М.   (2006-03-23 09:17:00) [7]


> Дмитрий_А  


Чем функция-то не угодила ?


procedure TForm1.Button1Click(Sender: TObject);
var
Script : OleVariant;
vaResult : OleVariant;
P : PSafeArray;
begin
Script := CreateOleObject('MSScriptControl.ScriptControl');
Script.Language:='VBScript';
Script.UseSafeSubset:=False;
Script.AddCode(Memo1.Lines.Text);
  v := VarArrayCreate([0, 0], varVariant);
  v[0] := '1111';
//   v[1] := '2222';
  P:= PSafeArray(TVarData(v).VArray);
  vaResult := Script.Run('OutError', v);

 ShowMessage(vaResult);
Script := Null
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо