Comment appeler la CreateOleObject fonction à l'aide de dwscript?
Je suis en train d'exécuter ce code (c'est un minimum de l'échantillon afin d'utiliser CreateOleObject) de l'intérieur d'un dwscript
function GetFileVersion(const FileName: string): string;
var
V : OleVariant;
begin
V := CreateOleObject('Scripting.FileSystemObject');
Result := V.GetFileVersion(FileName);
end;
Jusqu'à présent, j'ai essayé ce
{$APPTYPE CONSOLE}
{$R *.res}
uses
SysUtils,
ComObj,
ActiveX,
dwsComp,
dwsCompiler,
dwsExprs,
dwsCoreExprs;
procedure Execute;
var
LScript: TDelphiWebScript;
LUnit: TdwsUnit;
LProg: IdwsProgram;
LExec: IdwsProgramExecution;
begin
LScript := TDelphiWebScript.Create(NIL);
LUnit := TdwsUnit.Create(NIL);
try
LUnit.UnitName := 'Foo';
LUnit.Script := LScript;
// compile a simple script
LProg := LScript.Compile(
'function GetFileVersion(const FileName: string): string;'+sLineBreak+
'var'+sLineBreak+
' V : Variant;'+sLineBreak+
'begin'+sLineBreak+
' V := CreateOleObject(''Scripting.FileSystemObject'');'+sLineBreak+
' Result := V.GetFileVersion(FileName);'+sLineBreak+
'end;'+sLineBreak+
''+sLineBreak+
'PrintLn(GetFileVersion(''Foo''));'+sLineBreak+
''
);
if LProg.Msgs.HasErrors then begin
Writeln(LProg.Msgs.AsInfo);
Exit;
end;
try
LExec := LProg.Execute;
except
on E: Exception do
WriteLn(E.Message + sLineBreak + LExec.Msgs.AsInfo );
end;
Writeln(LExec.Result.ToString);
finally
LScript.Free;
end;
end;
begin
try
Execute;
Readln;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Mais je reçois ce message d'erreur
Erreur de syntaxe: nom Inconnu "CreateOleObject" [en ligne: 5, colonne: 8]
la question est de savoir comment je peut exécuter CreateOleObject
fonction à l'aide de dwscript?
Mise à JOUR
À la suite de la Linas suggestions, j'ai enfin pu résoudre le problème.
Ceci est un exemple de travail de l'application
uses
SysUtils,
ComObj,
ActiveX,
dwsComp,
dwsCompiler,
dwsExprs,
dwsComConnector,
dwsCoreExprs;
procedure Execute;
var
LScript: TDelphiWebScript;
LUnit: TdwsUnit;
LProg: IdwsProgram;
LExec: IdwsProgramExecution;
LdwsComConnector : TdwsComConnector;
begin
LScript := TDelphiWebScript.Create(NIL);
LdwsComConnector:=TdwsComConnector.Create(nil);
LdwsComConnector.Script:=LScript;
LUnit := TdwsUnit.Create(NIL);
try
LUnit.UnitName := 'Foo';
LUnit.Script := LScript;
// compile a simple script
LProg := LScript.Compile(
'function GetFileVersion(const FileName: string): string;'+sLineBreak+
'var'+sLineBreak+
' V : OleVariant;'+sLineBreak+
'begin'+sLineBreak+
' V := CreateOleObject(''Scripting.FileSystemObject'');'+sLineBreak+
' Result := VarToStr(V.GetFileVersion(FileName));'+sLineBreak+
'end;'+sLineBreak+
''+sLineBreak+
'PrintLn(GetFileVersion(''C:\Bar\Foo.exe''));'+sLineBreak+
''
);
if LProg.Msgs.HasErrors then begin
Writeln(LProg.Msgs.AsInfo);
Exit;
end;
try
LExec := LProg.Execute;
except
on E: Exception do
WriteLn(E.Message + sLineBreak + LExec.Msgs.AsInfo );
end;
Writeln(LExec.Result.ToString);
finally
LScript.Free;
LdwsComConnector.Free;
end;
end;
begin
try
CoInitialize(nil);
try
Execute;
Readln;
finally
CoUninitialize;
end;
except
on E:Exception do
Writeln(E.Classname, ':', E.Message);
end;
end.
Utilise dwsComConnector ?
J'ai juste ajouté que l'unité, avec les mêmes résultats :(.
Je devine ici, mais il utilise la directive dans votre fichier :
Voir comment cette unité de test est fait pour utiliser CreateOleObject : UCOMConnectorTests.
Je ne vois pas où
J'ai juste ajouté que l'unité, avec les mêmes résultats :(.
Je devine ici, mais il utilise la directive dans votre fichier :
uses Windows, Classes, SysUtils, dwsComp, dwsCompiler, dwsExprs, dwsComConnector, Variants, ActiveX, ComObj, dwsXPlatform, dwsUtils;
Voir comment cette unité de test est fait pour utiliser CreateOleObject : UCOMConnectorTests.
Je ne vois pas où
CreateOleObject
est appelée à partir des scripts de test. Elle est appelée dans le code Delphi pour ajouter des éléments à une base de données.
OriginalL'auteur Salvador | 2012-03-14
Vous devez vous connecter pour publier un commentaire.
Ceci peut être accompli de deux façons.
1: Vous devez déposer
TdwsComConnector
(à partir de l'unitédwsComConnector
) à votre module de données ou un formulaire (ou de le créer manuellement) et affecter votre script d'instance. par exemple:De 2 façon:
Cela permettra d'exposer CreateOleObject fonction de DWScript afin de vous permettre de l'utiliser.
Aussi, vous devez déclarer votre
V
commeOleVariant
au lieu deVariant
et modifier la ligne àResult := VarToStr(V.GetFileVersion(FileName));
pour le faire fonctionner correctement.OriginalL'auteur Linas