Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.09;
Скачать: CL | DM;

Вниз

Несколько проблем при использовании ScriptControl   Найти похожие ветки 

 
AFROLOV   (2002-08-27 15:23) [0]

Код практически мало примним, просто я пытаюсь понять как это все работает.

текст скрипта 1:

Function Main
Dim A as long
Main =DateAdd("yyyy",1,Date)
End Function


текст скрипта 2:

Function Main
Main =DateAdd("yyyy",1,Date)
End Function



procedure TForm1.Button1Click(Sender: TObject);
var
dd:TDateTime;
par:SafeArray;
pPar:PSafeArray;
Language:String;
res:Variant;
begin
ScriptControl.Reset();
Language:="VBScript";

ScriptControl.Language:=Language;
ScriptControl.AddCode(Memo1.Text);//Тут выдается ошибка - "предпологается наличие окончания инструкции." если используется скрипт 1
pPar:=@par;

res:=ScriptControl.Run("Main",pPar);//здесь выдается ошибка - "Разрушительный Сбой" - верорятнее всего он связан с неверным использованием safeArray. до этого места программа доходит если использутся скрипт 2

dd:=res;
MessageBox(0,PChar(DateToStr(dd)),"",MB_OK);
end;


Подскажите как с этими проблемами бороться. Заранее спасибо.


 
SEM   (2002-08-27 16:16) [1]

Что использовать SafeArray, необходимо выделить для него память. См. SafeArrayCreate.


 
AFROLOV   (2002-08-27 16:25) [2]

C SafeArray проблему решил. Спасибо.

Но передать через него ничего не удается
Вот скрипт
Function Main (V)
"Main=DateAdd("yyyy",1,Date)
Main=V(0)
End Function

var
Language:String;
V:Variant;
P:PSafeArray;
res:Variant;
dd:String;
begin
ScriptControl.Reset();
Language:="VBScript";

ScriptControl.Language:=Language;
ScriptControl.AddCode(Memo1.Text);
V:=VarArrayCreate([0, 1], varVariant);
V[0]:="!";
V[1]:=1;
P:=PSafeArray(TVarData(V).VArray);
res:=ScriptControl.Run("Main", P);
dd:=res;
MessageBox(0,PChar(dd),"",MB_OK);
end;

И еще странно, что не удается функции заголовок нормальный сделать типа
Function F1 (Byref A as String) as Long


 
SEM   (2002-08-27 16:48) [3]

SafeArray - это массив, где каждый элемент соответствует
одному параметру функции скрипта - Main.
Функция Main будет такой:

Function Main (a, b)
Main = a
End Function

Возвратить должна "!"

P.S. Точно не помню, давно делал, поэтому за правильность
не ручаюсь.


 
AFROLOV   (2002-08-27 17:13) [4]

Спасибо. С параметрами разобрался.
Вот еще какая проблема:
Function Main (A,B)
for i=1 to 100
next i

"Main=DateAdd("yyyy",1,Date)
Main=A
End Function

ScriptControl.AddCode(Memo1.Text);//выдается ошибка - "предпологается наличие окончания инструкции.
Если выделенный цикл убрать то все хорошо. Создается такое впечатление, что скрипты длиннее 1 строчки полезного кода работать не хотят.:-(


 
SEM   (2002-08-27 17:22) [5]

For counter = start To end [Step step]
[statements]
[Exit For]
[statements]
Next

После "next" нужно убрать "i"


 
AFROLOV   (2002-08-27 17:37) [6]

Да, отличается VbScript от VB. Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2002.09.09;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.008 c
3-26855
juster
2002-08-19 11:36
2002.09.09
без BDE


3-26910
NIKI
2002-08-20 12:32
2002.09.09
Проблемма с последней строкой в Query


1-26945
Геральт
2002-08-28 22:04
2002.09.09
MainForm


8-27119
As1
2002-05-10 17:42
2002.09.09
Графика


1-27078
ruslan_as
2002-08-28 11:46
2002.09.09
имитация нажатия клавиши





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский