A few points that might help (NT4SP3):
The CR8 engine is a single-threading DLL. I am not sure what the impact of that is, but the developer help makes a point of stating it.
The Oracle client-side products do something to MDAC that can trigger errors ( don't recall if the out of memory error was one of them) when no-one is logged into the server, even if out MTS component that calls the CR8 Engine DLL is set to run under the local admin account. We solved this by re-installing MDAC after installing Net8 or any patches to it.
We received out of memory errors printing and exporting CR8 reports under MTS component control when the parameters were not perfectly matched and/or when the DSN was not exactly the same (name, vendor, version) as the one used to create the report (we develop the reports on a desktop and run them on a server). We also experienced it on some reports when the data was incomplete (a report design issue or a flaw in CR8). In this case, the error could be replicated when the report was triggered through the standard CR user interface.
The material I have read state that an MTS component must instantiate another MTS component with the CreateInstance method of the MTS context object. CreateObject should not be used in this context. From what I can tell, this is required for transactional integitry and facilitates connection pooling and memory cleanup (the .SetAbort method signals that the object and it's connection ca be released).
Multiple books on MTS progamming state that "As NEW" must be avoided, as should all forms of early binding. MTS components must be late bound because MTS substitutes it's class ID for the class IDs of the component and early binding circumvents this substitution. We use "DIM X as whatever" to get the editing features, but always instantiate objects with CreateObject and CreateInstance (for transactional MTS components).
Larry
Larry
Larryh@ecn.ab.ca