Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];

Вниз

Несколько проблем при использовании 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.006 c
8-27120
DDDeN
2002-05-09 16:02
2002.09.09
Громкости звуков


1-26977
VZ-KZ
2002-08-29 15:34
2002.09.09
E-mail


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


1-27053
Denvor
2002-08-27 19:15
2002.09.09
Может ли TIMAGE спокойно обновляться без рывков?


14-27168
EAlexander
2002-08-13 13:19
2002.09.09
.Net





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский