Article ID: 196135
Article Last Modified on 8/21/2007
extern "C" int WINAPI _tWinMain(HINSTANCE hInstance,
HINSTANCE /*hPrevInstance*/, LPTSTR lpCmdLine, int /*nShowCmd*/)
{
HRESULT hRes = CoInitialize(NULL);
_ASSERTE(SUCCEEDED(hRes));
_Module.Init(NULL, hInstance);
_Module.dwThreadID = GetCurrentThreadId();
int nRet = 0;
CClientDlg* pDlg = NULL;
pDlg = new CClientDlg;
if(NULL != pDlg)
{
pDlg->Create(NULL);
pDlg->ShowWindow(SW_NORMAL);
MSG msg;
while (GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
nRet = msg.wParam;
delete pDlg;
}
CoUninitialize();
return nRet;
}
#include "ClientDlg.h"
LRESULT CClientDlg::OnCancel(WORD wNotifyCode, WORD wID,
HWND hWndCtl, BOOL& bHandled)
{
DestroyWindow();
PostQuitMessage(0);
return 0;
}
LRESULT CClientDlg::OnOK(WORD wNotifyCode, WORD wID,
HWND hWndCtl, BOOL& bHandled)
{
IDispatch* pDisp; // Main IDispatch pointer.
CLSID clsid; // Holds CLSID of server
DISPID dispID; // Temporary variable to hold DISPIDs.
HRESULT hr; // General error/result holder.
hr = CLSIDFromProgID(L"Excel.Application", &clsid);
if(FAILED(hr)){
MessageBox("Excel is not installed.");
return 0;}
hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER,
IID_IDispatch, (void **)&pDisp);
if(FAILED(hr)){
MessageBox("Couldn't start Excel.");
return 0;}
OLECHAR *szVisible = L"Visible";
DISPPARAMS dispParams = { NULL, NULL, 0, 0 };
DISPID dispidNamed = DISPID_PROPERTYPUT;
CComVariant vrTrue = VARIANT_TRUE;
pDisp->GetIDsOfNames(IID_NULL, &szVisible, 1,
LOCALE_USER_DEFAULT, &dispID);
dispParams.cArgs = 1;
dispParams.rgvarg = &vrTrue;
dispParams.cNamedArgs = 1;
dispParams.rgdispidNamedArgs = &dispidNamed;
// Set 'Visible' property to true.
pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYPUT | DISPATCH_METHOD, &dispParams,
NULL, NULL, NULL);
MessageBox("We're done.", "Finish", MB_SETFOREGROUND);
// Release the IDispatch pointer before exit
pDisp->Release();
return 0;
}
Additional query words: OLE
Keywords: kbautomation kbhowto kboleapp KB196135