- BORLAND/: Borland C++ 4.52 (chosen over 4.5 by byte-match: CODE/RP/CW32.LIB
is identical to 4.52's install lib). BCC32/TLINK32/TLIB/MAKE run natively on
Win11; CODE/BT/OPT.MAK is the shipped BTL4OPT.EXE's exact flag recipe
(extender = Borland PowerPack DPMI32, not Phar Lap TNT).
- restoration/source410/: the literal 1995-form reconstruction of the missing
BT game source (never mixed into CODE/). Round 1-3 state:
* 6 of 10 surviving original TUs COMPILE CLEAN under the period toolchain
(BTMSSN, BTCNSL, BTSCNRL, BTTEAM, BTL4MODE, BTL4ARND) - first builds
since 1996.
* BT_L4/BTL4APP.CPP pilot reconstruction: 12/12 functions, Fail() lands on
its binary-recorded line 400 exactly.
* BT/BTCNSL.HPP: console wire IDs recovered from the binary's ctors
(Killed=9, Damaged=10, ScoreUpdate=13, DeathWithoutHonor=15 [T1];
TeamScore=12 flagged [T4]).
* MUNGA/: 8 engine-header backfills back-dated from the BT412 WinTesla tree
(VDATA numbering decomp-verified; AUDREND's OpenAL-era virtual removed -
the period compiler is the drift detector).
* Tooling: backdate.py (WinTesla->1995 header transform), compile410.sh
(per-TU verification sweep under authentic OPT.MAK flags).
* README: corrected roadmap - MECH.HPP is the capstone grown with the mech
TU reconstructions; BTREG.CPP green = the header-family milestone.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
204 lines
9.4 KiB
Plaintext
204 lines
9.4 KiB
Plaintext
Overview
|
|
========
|
|
The AUTOCALC project is an example illustrating OLE 2 automation
|
|
servers and controllers. The list below describes the targets
|
|
produced by the example:
|
|
|
|
ACALIPS.DLL : DLL version of OLE 2 automation server.
|
|
AUTOCALC.EXE : EXE version of OLE 2 automation server.
|
|
CALLCALC.EXE : Automation controller which exercises the
|
|
DLL and EXE automation servers.
|
|
|
|
The following sections describe how to build, register and run
|
|
the samples created AUTOCALC using either the Integrated
|
|
Development Environment (IDE) or the command line tools of
|
|
Borland C++. The section 'Additional Information' provides some
|
|
interesting insights on the features illustrated by the samples.
|
|
|
|
|
|
Building the Samples from the IDE
|
|
=================================
|
|
To build the targets described above, open the AUTOCALC.IDE
|
|
project and select the 'Build All' option from the Project menu.
|
|
NOTE: It is important to select 'Build All' as the DLL and EXE
|
|
servers are built from the same sources but require different
|
|
compiler configurations.
|
|
|
|
|
|
Registering the Servers from the IDE
|
|
====================================
|
|
The DLL and EXE servers must be registered with OLE before
|
|
running the controller. After building the targets, register the
|
|
automation servers using the steps described below:
|
|
|
|
i. Right-mouse click on the ACALIPS.DLL node within the Project window.
|
|
(This activates the local menu).
|
|
|
|
ii. Select the 'Special|Register OLE Server' menu option.
|
|
(This registers the DLL Server with OLE).
|
|
|
|
Repeat the above steps with the AUTOCALC.EXE node to register the
|
|
EXE server with OLE.
|
|
|
|
|
|
Running the Controller from the IDE
|
|
===================================
|
|
To exercise the DLL and EXE servers, activate the CALLCALC.EXE
|
|
node and select the Run option from the Debug menu. CALLCALC
|
|
looks for a command line argument string consisting of numbers
|
|
between 1 and 6. The following table describes how each number
|
|
is interpreted by the controller:
|
|
|
|
Number in CmdLine Action performed by Controller
|
|
---------------------------------------------------------------
|
|
1 Binds to EXE Server via CLSID
|
|
2 Binds to EXE Server via progid
|
|
3 Binds to DLL Server via CLSID
|
|
4 Binds to DLL Server via progid
|
|
5 Binds to EXE Server via CLSID in debug mode
|
|
6 Binds to EXE Server via progid in debug mode
|
|
|
|
|
|
If no command line string is specified, CALLCALC.EXE defaults to
|
|
"1234" - the EXE and DLL Servers are activated via both CLSID
|
|
and progids in non-debug mode. You can specify an argument
|
|
string by selecting Environment|Debugger|Run_Arguments from the
|
|
Options menu. For example, the string "135" exercises the
|
|
servers by binding via CLSIDs only.
|
|
|
|
|
|
Using the command line tools
|
|
============================
|
|
A MAKEFILE is provided for building the samples of this project.
|
|
Since OLE applications need to perform several tasks, (such as
|
|
registering with the system or generating TypeLibrary files)
|
|
which require Windows, you must run the MAKEFILE at a DOS prompt
|
|
from Windows and make sure that the Borland C++ WINRUN utility
|
|
is properly configured. (See UTILS.TXT for more information
|
|
about WINRUN).
|
|
|
|
|
|
Building the Samples from the command line
|
|
==========================================
|
|
To build the targets described above, simply execute the MAKE
|
|
command from the EXAMPLES\OCF\AUTOCALC directory. NOTE: The
|
|
MAKE utility will execute the AUTOCALC.EXE program to generate a
|
|
TypeLibrary file which is then used to build CALLCALC.EXE.
|
|
|
|
|
|
Registering the Servers from the command line
|
|
=============================================
|
|
The MAKE utility will automatically invoke the REGISTER.EXE
|
|
utility to register the DLL version of the automation server.
|
|
The MAKE utility also executes the AUTOCALC.EXE application (to
|
|
generate a TypeLibrary file) which allows the EXE server to be
|
|
registered.
|
|
|
|
|
|
Running the Controller from the command line
|
|
============================================
|
|
To exercise the DLL and EXE servers, run CALLCALC.EXE utility
|
|
using the following command:
|
|
|
|
wr callcalc.exe
|
|
|
|
CALLCALC looks for a command line argument string consisting of
|
|
numbers between 1 and 6. The following table describes how each
|
|
number is interpreted by the controller:
|
|
|
|
Number in CmdLine Action performed by Controller
|
|
---------------------------------------------------------------
|
|
1 Binds to EXE Server via CLSID
|
|
2 Binds to EXE Server via progid
|
|
3 Binds to DLL Server via CLSID
|
|
4 Binds to DLL Server via progid
|
|
5 Binds to EXE Server via CLSID in debug mode
|
|
6 Binds to EXE Server via progid in debug mode
|
|
|
|
|
|
If no command line string is specified, CALLCALC.EXE defaults to
|
|
"1234": the EXE and DLL Servers are activated via both CLSID
|
|
and progids in non-debug mode. The following command exercices
|
|
the servers by binding via CLSIDs only.
|
|
|
|
wr callcalc.exe 135
|
|
|
|
Note that the Accumulator field of the CALLCALC dialog box is updated by an
|
|
automation callback from the calculator using a report object passed to the
|
|
callculator by the controller. Try manually entering numbers in the calculator.
|
|
|
|
|
|
Additional Build Information
|
|
======================
|
|
This sample illustrates building both a DLL and EXE server from
|
|
one set of sources. The file WINMAIN.CPP takes advantage of
|
|
compiler macros to provide separate OLE registration values and
|
|
program entry point (LibMain vs. WinMain) for the DLL and EXE
|
|
versions. NOTE: Since the DLL and EXE server use the same set of
|
|
.CPP files, make sure that you use the Build_All option when
|
|
rebuilding either servers after modifying the sources.
|
|
|
|
This sample also illustrates the performance advantage of DLL
|
|
servers: the passes which bind to the DLL server are noticeably
|
|
faster than the ones which bind to the EXE version.
|
|
|
|
|
|
Automated Classes - examples of various types of automated classes
|
|
=================
|
|
|
|
class TCalc application object, contains TCalcWindow as a member object
|
|
class TCalcWindow calculator dialog box with window property accessors
|
|
class TCalcButton simple encapsulation of a dialog button
|
|
class TButtonList collection of calculator buttons, exposed for automation
|
|
class TCalcArray collection of simple integers, not related to calc function
|
|
|
|
|
|
Automation Features Demonstrated
|
|
================================
|
|
|
|
Returning C++ objects - TCalcWindow as a property of TCalc
|
|
C++ objects as arguments - LookAtWindow method with TCalcWindow argument
|
|
External object as property - TUpdate object binding to external IDispatch*
|
|
Callback via external object - Calling method on TUpdate proxy object
|
|
Exposing collection of intrisic types - interger array exposed as collection
|
|
Exposing collection of objects - TButtonList collection of TCalcButton objects
|
|
Enumeration of C++ enumeration - translation of C++ operators to text strings
|
|
Help strings, help context IDs, and help files for automation
|
|
Localization of names and help - resourced translations for German language
|
|
Registration of error code translator - function to convert codes to strings
|
|
|
|
|
|
Running AUTOCALC from a VBA application
|
|
=======================================
|
|
|
|
BASIC scripts are supplied which bring up and control the calculator.
|
|
Note that the script first trys to connect to a running instance of AUTOCALC,
|
|
then, if that fails, will create a new instance of AUTOCALC.
|
|
The progid, "OCCalc.Application", may be changed to "OCCalc.DLLServer".
|
|
The steps to run the AUTOCALC.BAS script from Microsoft Excel are as follows:
|
|
Invoke EXCEL.EXE
|
|
Menu: Insert..Macro..Module
|
|
Menu: Insert..File..(select All Files(*.*), select directory) AUTOCALC.BAS
|
|
At this point script will run with F5 or the VB run icon (green triangle).
|
|
To enable browsing the registered type library for AUTOCALC do as below:
|
|
Menu: Tools..References..check: Automated Calculator 1.0 Application
|
|
The F2 key brings up the Object Browser, select Library: OCCalc.Application
|
|
To enable Excel to use German scripts, German type libraries must be setup:
|
|
VBADE.OLB must be present, normally in the WINDOWS\SYSTEM directory
|
|
XLDE50.OLB must be present, normally in the same directory with Excel
|
|
In order to use the object browser, the German typelib must be registered:
|
|
Run AUTOCALC with the command line: -Language=9 -Typelib=ACALCGER
|
|
Create a new workbook with File New or by invoking Excel
|
|
Menu: Insert..Macro..Module (or use the icon with a bunch of linked boxes)
|
|
Menu: Tools..References..Browse..navigate to and select XLDE50.OLB
|
|
Ignore the following following error message and exit the dialogs with OK:
|
|
"Object library's language setting incompatible with current project"
|
|
Menu: Tools..References..Browse..navigate to and select VBADE.OLB
|
|
The German type libraries are now registered in the system registry.
|
|
To run the German language script, ACALCGER.BAS, perform the steps below:
|
|
Menu: Tools..Options..Module General..Language/Country..German/Germany
|
|
Menu: Insert..File..(select All Files(*.*), select directory) ACALCGER.BAS
|
|
Menu: Tools..References..check: Automatisierte Taschenrechner-Anwendung 1.0
|
|
Bring up the Object Browser, select Library: OCCalc.Application
|
|
|