COM LW Active Scripting: more progress...
Hi ok. This is what I end up getting with my implementation of Active Scripting Automation. I am very, very close to getting it to work. Please note that I have a deadline next wednesday (March 19th) to have this done at least as a show of feasability. Let me repeat that this project is VITAL to the expanded use of Common Lisp in my lab (as well as possible future commercial ventures). I managed to register all the necessary keys in the Window Registry, in order to make CLAXS (the .exe I deliver) known to COM as an Active Scripting Engine. The class definition is below. I couldn't make much sense out of the explanation given about the interplay between :COCLASS and :INTERFACES. So I may have done something wrong. (In particular factory registration is a rather mysterious process, as explained in the documentation). > (com:define-automation-component active-script-impl (com:standard-i-dispatch) > ((script-site :accessor script-site > :initform nil) > (script-state :accessor script-state > :initform 'SCRIPTSTATE_UNINITIALIZED) > (named-items :accessor named-items > :initform '()) > (event-handlers :accessor event-handlers > :initform '()) > ) > ;; Implemented interfaces > (:interfaces i-active-script i-active-script-parse) > ) Below is a trace of what happens when a C++ program launches the CLAX.exe program as an Automation server (I changed some formatting for readability). Note that my understanding is that I should not need a type library for my component. ================================================================================ ;;; Z:\lang\cl\cl-activex-scripting\CLAXS.exe -Embedding ;;; Here we go.... Error: NIL is not of type COM::BASIC-TYPE-INFO-DESCRIPTOR. 1 (abort) Quit process. Type :b for backtrace, :c <option number> to proceed, or :? for other options CL-USER 1 : 1 > :b Call to COM::ENSURE-STANDARD-I-DISPATCH-TYPE-INFO Call to (COM::COM-METHOD COM:NONDELEGATING-ADD-REF COM:STANDARD-I-UNKNOWN COM:I-NONDELEGATING-UNKNOWN) Call to FLI::FOREIGN-CALLABLE-ENTRY-POINT-AUX-NESTED Call to COM::|COM Member : (I-UNKNOWN ADD-REF)| Call to (COM::COM-METHOD COM:NONDELEGATING-QUERY-INTERFACE COM:STANDARD-I-UNKNOWN COM:I-NONDELEGATING-UNKNOWN) Call to (COM::COM-METHOD COM:QUERY-INTERFACE COM:STANDARD-I-UNKNOWN COM:I-UNKNOWN) Call to COM:DEFAULT-COM-IMPLEMENTATION-CONSTRUCTOR Call to (COM::COM-METHOD COM:CREATE-INSTANCE COM::C-GENERIC-CLASS-FACTORY COM::I-CLASS-FACTORY) Call to FLI::FOREIGN-CALLABLE-ENTRY-POINT-AUX-NESTED Call to WIN32:DISPATCH-MESSAGE Call to WIN32::PROCESS-MESSAGES Call to MP::WIN32-PROCESS-WAIT-FOR-EVENT Call to MP:PROCESS-READ-EVENT Call to CAPI-INTERNALS:LOOP-PROCESS-EVENTS Call to CAPI::RUN-IN-PROCESS Call to CAPI:DISPLAY Call to CL.ACTIVEX-SCRIPTING::CL-ACTIVE-SCRIPTING-STARTUP-FUNCTION Call to DELIVERY::MAYBE-RYB-TOP-LEVEL Call to (SUBFUNCTION 1 MP::INITIALIZE-PROCESS-STACK) CL-USER 2 : 1 > :v Call to COM::ENSURE-STANDARD-I-DISPATCH-TYPE-INFO COM::THIS : #<CL.ACTIVEX-SCRIPTING::ACTIVE-SCRIPT-IMPL 2060B04C> ================================================================================ Please help. Thanks -- Marco Antoniotti