Monday, November 08, 2010 at 12:02 AM.

on callScript (scriptCode, language, mainRoutine, parameters) {
	<<Run an Active Scripting Engine script.
			<<scriptCode is the actual script.
				<<This script should be composed of subroutines and functions.
			<<language is the script's language.
				<<Examples: VBScript, JScript, PerlScript
				<<The name of the function or subroutine in the script to call.
				<<A list, the parameters to pass to the script that's called.
		<<Note: the Microsoft Script Control is required.
	local (dllPath = frontier.pathString + "DLLs\\ScriptControlDLL.dll");
	<<local (dllPath = "D:\\Projects\\ScriptControlDLL\\Debug\\ScriptControlDLL.dll")
	local (methodName = "callscript");
	local (result);
	local (flDebug = false);
	if typeOf (parameters) != listType {
		scriptError ("Can't call com.callScript because the last parameter must be a list.")};
	if flDebug {
		new (outlineType, @temp.scriptControlDllTrace)};
	result = (dllPath, methodName, scriptCode, language, mainRoutine, parameters);
	if result endsWith " COM ERROR!" { //this is our flag that an error occurred
		local (errorMessage);
		result = string.mid (result, 1, sizeOf (result) - 11);
		errorMessage = "Can't execute this script because the Script Control reports: \"";
		errorMessage = errorMessage + result + "\"";
		errorMessage = string.replaceAll (errorMessage, "\r\n", "");
		if flDebug {
			edit (@temp.scriptControlDllTrace);
			window.zoom (@temp.scriptControlDllTrace);
			temp.lastErrorMessage = errorMessage};
		scriptError (errorMessage)};
	if flDebug {
		edit (@temp.scriptControlDllTrace);
		window.zoom (@temp.scriptControlDllTrace)};
	return (result)}
<<bundle //test code
	<<local (s = "Function MyMainRoutine (a, b)\r\nMsgBox (a)\r\nMyMainRoutine = b * 3\r\nEnd Function")
	<<local (x)
	<<x = com.callScript (s, "VBScript", "MyMainRoutine", {"Scripting is fun!", 3})
	<<dialog.notify ("The returned value is " + x + ".")

This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.