89 lines
2.8 KiB
Python
89 lines
2.8 KiB
Python
import os
|
|
import sys
|
|
import traceback
|
|
|
|
import pythoncom
|
|
import win32ui
|
|
from win32com.axscript import axscript
|
|
from win32com.axscript.server import axsite
|
|
from win32com.axscript.server.error import Exception
|
|
from win32com.server import util
|
|
|
|
version = "0.0.1"
|
|
|
|
|
|
class MySite(axsite.AXSite):
|
|
def OnScriptError(self, error):
|
|
print("An error occurred in the Script Code")
|
|
exc = error.GetExceptionInfo()
|
|
try:
|
|
text = error.GetSourceLineText()
|
|
except:
|
|
text = "<unknown>"
|
|
context, line, char = error.GetSourcePosition()
|
|
print(
|
|
"Exception: %s (line %d)\n%s\n%s^\n%s"
|
|
% (exc[1], line, text, " " * (char - 1), exc[2])
|
|
)
|
|
|
|
|
|
class ObjectModel:
|
|
_public_methods_ = ["echo", "msgbox"]
|
|
|
|
def echo(self, *args):
|
|
print("".join(map(str, args)))
|
|
|
|
def msgbox(self, *args):
|
|
msg = "".join(map(str, args))
|
|
win32ui.MessageBox(msg)
|
|
|
|
|
|
def TestEngine():
|
|
model = {"Test": util.wrap(ObjectModel())}
|
|
scriptDir = "."
|
|
site = MySite(model)
|
|
pyEngine = site._AddEngine("Python")
|
|
# pyEngine2 = site._AddEngine("Python")
|
|
vbEngine = site._AddEngine("VBScript")
|
|
# forthEngine = site._AddEngine("ForthScript")
|
|
try:
|
|
# code = open(os.path.join(scriptDir, "debugTest.4ths"),"rb").read()
|
|
# forthEngine.AddCode(code)
|
|
code = open(os.path.join(scriptDir, "debugTest.pys"), "rb").read()
|
|
pyEngine.AddCode(code)
|
|
code = open(os.path.join(scriptDir, "debugTest.vbs"), "rb").read()
|
|
vbEngine.AddCode(code)
|
|
# code = open(os.path.join(scriptDir, "debugTestFail.pys"),"rb").read()
|
|
# pyEngine2.AddCode(code)
|
|
|
|
# from win32com.axdebug import axdebug
|
|
# sessionProvider=pythoncom.CoCreateInstance(axdebug.CLSID_DefaultDebugSessionProvider,None,pythoncom.CLSCTX_ALL, axdebug.IID_IDebugSessionProvider)
|
|
# sessionProvider.StartDebugSession(None)
|
|
|
|
input("Press enter to continue")
|
|
# forthEngine.Start()
|
|
pyEngine.Start() # Actually run the Python code
|
|
vbEngine.Start() # Actually run the VB code
|
|
except pythoncom.com_error as details:
|
|
print("Script failed: %s (0x%x)" % (details[1], details[0]))
|
|
# Now run the code expected to fail!
|
|
# try:
|
|
# pyEngine2.Start() # Actually run the Python code that fails!
|
|
# print "Script code worked when it should have failed."
|
|
# except pythoncom.com_error:
|
|
# pass
|
|
|
|
site._Close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import win32com.axdebug.util
|
|
|
|
try:
|
|
TestEngine()
|
|
except:
|
|
traceback.print_exc()
|
|
win32com.axdebug.util._dump_wrapped()
|
|
sys.exc_type = sys.exc_value = sys.exc_traceback = None
|
|
print(pythoncom._GetInterfaceCount(), "com objects still alive")
|