MORE INFORMATION
The code listed below does not do any error checking. When you implement
it, you should add the code to do necessary error checking. See the OLE SDK
documentation for more information about each function or interface. Each
code listing shows how to obtain the pointer to IDispatch of an Automation
object in the pdisp variable.
CreateObject(progID)
This creates a new automation object and returns a pointer to the IDispatch
of that object.
CLSID clsid;
LPUNKNOWN punk;
LPDISPATCH pdisp;
OleInitialize(NULL), if OLE isn't already loaded.
CLSIDFromProgID(progID, &clsid);
CoCreateInstance(clsid, NULL, CLSCTX_SERVER,
IID_IUnknown, (LPVOID FAR*)&punk);
punk->QueryInterface(IID_IDispatch, (LPVOID FAR*)&pdisp);
punk->Release();
GetObject(filename, progID)
GetObject has three different semantics depending on the number of
parameters passed. An automation object must implement IPersistFile to
support GetObject(filename, progID).
CLSID clsid;
LPUNKNOWN punk;
LPDISPATCH pdisp;
LPPERSISTFILE pPF;
OleInitialize(NULL), if OLE isn't already loaded
CLSIDFromProgID(progID, &clsid);
CoCreateInstance(clsid, NULL, CLSCTX_SERVER,
IID_IUnknown, (LPVOID FAR*)&punk);
punk->QueryInterface(IID_IPersistFile, (LPVOID FAR*)&pPF);
punk->Release();
pPF->Load(filename, 0);
pPF->QueryInterface(IID_IDispatch, (LPVOID FAR*)&pdisp);
pPF->Release();
GetObject(filename,)
GetObject has three different semantics depending on the number of
parameters passed. An automation object must implement IPersistFile to
support GetObject(filename,).
LPBC pbc;
ULONG cEaten;
LPMONIKER pmk;
LPDISPATCH pdisp;
OleInitialize(NULL), if OLE isn't already loaded
CreateBindCtx(0, &pbc);
MkParseDisplayName(pbc, filename, &cEaten, &pmk);
BindMoniker(pmk, 0, IID_IDispatch, (LPVOID FAR*)&pdisp);
pmk->Release();
pbc->Release();
GetObject(, progID)
GetObject has three different semantics depending on the number of
parameters passed. An automation object must call RegisterActiveObject to
support GetObject(, progID).
CLSID clsid;
LPUNKNOWN punk;
LPDISPATCH pdisp;
OleInitialize(NULL), if OLE isn't already loaded
CLSIDFromProgID(progID, &clsid);
GetActiveObject(clsid, NULL, (LPVOID FAR*)&punk);
punk->QueryInterface(IID_IDispatch, (LPVOID FAR*)&pdisp);
punk->Release();