?
Hallo,
Ich hoffe, dass mir hier einer bei meinem problem weiterhelfen kann...
Folgendes, ich benötige etwas, mit dem ich beliebige Skripte (Skriptsprachen)in meine Applikation einbauen kann und das Skript durch eigene Funktionen aus der Applikatoin erweitern kann.
Hierfür hat sich nach erstem forschen dann auch gleich ein Script Control Objekt MSScriptControl angeboten...
Nun habe ich aber riesige probleme das teil richtig zum laufen zu bekommen...
Ich kann keine Parameter by reference übergeben bzw. ich kann diese im Skript zwar verändern aber im c++ source nicht wieder auslesen. Zudem hab ich keine ahnung , wie ich neue Funktionalitäten in c++ definieren kann, damit ich diese im Skript dann verwenden kann
Hier ist beispielsource zu meinem Problem:
void __fastcall TFormScriptSample::pButtonRunScriptClick(TObject *Sender)
{
try
{
//Array, um Parameter dem Skript zur Verfügung zu stellen
SAFEARRAY *sa;
//Initialisiert Dimension und Elementanzahl des SAFEARRAY
SAFEARRAYBOUND rgsabound[1];
//Dimensionen: 1
rgsabound[0].lLbound = 1;
//einzufügende Elemente: 3
rgsabound[0].cElements = 3;
sa = SafeArrayCreateVector(VT_VARIANT,1,3);
long x[3];
long *pX = x;
Variant result;
pScriptControl->Language = "VBScript";
pScriptControl->Reset();
//Initialisieren der beiden Übergabeparameter
Variant vParam[3];
vParam[0] = WideString("1111111");
vParam[1] = WideString("2222222");
vParam[2] = WideString("3333333");
for(int i =0; i<3; i++)
{
x[i] = i+1;
// Hier ist nur wichtig, dass die Anzahl der Parameter mit der im Script übereinstimmt
//(hier 3 stück, da in for schleife...) --> Bezeicher müssen nicht gleich sein
//zu übergebende Parameter: (SAFEARRAY, Parameter Index, Parameter Referenz)
SafeArrayPutElement(sa,pX,&vParam[i]);
pX++;
}
String sEditText = pRichEditVBScript->Text;
pScriptControl->AddCode(WideString(sEditText));
result = pScriptControl->Run(WideString("test"),&sa);
pScriptControl->ExecuteStatement(WideString("MsgBox (\"Hello\")"));
ShowMessage("Test Result = " + result);
//here s.th does not work... i'd like to get the modified
//parameter value but it still is "333333"
//i can only achieve the params as return value "result"...
Variant i ;
SafeArrayGetElement(sa,pX,&i);
ShowMessage(i);
SafeArrayDestroy(sa);
}
catch(Exception &e)
{
ShowMessage(e.Message);
}
}
//-----------------------------------------------------------------------------
void __fastcall TFormScriptSample::FormCreate(TObject *Sender)
{
pScriptControl->AllowUI = true;
}
Im Textfeld steht dann folgendes :
'-------------------------------------------
'in the ChangeParam function the call by ref works...
Function ChangeParam(param)
param = "i am changed"
End Function
'-------------------------------------------
Function Test(param1, param2, param3)
MsgBox "param3 = " ¶m3
ChangeParam param3
MsgBox "param3 = " ¶m3
Test = param1 + " " + param2 + " " + param3
End Function
Ich bin für jede hilfe dankbar
Mfg
splash