// ExecPkgWithEvents.cpp #include "ExecPkgWithEvents.h" IDTSPackage2* pDTSPackage2 = NULL; CDTSPackageEvents* pDTSPackageEvents = NULL; LPCONNECTIONPOINT pCP = NULL; DWORD dwCookie = 0; INT _tmain(INT argc, TCHAR* argv[], TCHAR* envp) { HRESULT hr; if SUCCEEDED(hr = OleInitialize(NULL) ) { try { HRESULT hr; hr = CoCreateInstance(CLSID_DTSPackage2, NULL, CLSCTX_ALL, IID_IDTSPackage2, (void**) &pDTSPackage2); if (SUCCEEDED(hr)) { try { _variant_t v; hr = pDTSPackage2->LoadFromSQLServer( _T("(local)\\dev"), // _bstr_t ServerName _T(""), // _bstr_t ServerUserName _T(""), // _bstr_t ServerPassword DTSSQLStgFlag_UseTrustedConnection, _T(""), // _bstr_t PackagePassword _T(""), // _bstr_t PackageGuid _T(""), // _bstr_t PackageVersionGuid _T("Par5"), // _bstr_t PackageName &v); // VARIANT* pVarPersistStgOfHost // Begin - Setup events // LPCONNECTIONPOINTCONTAINER pCPC = NULL; pDTSPackageEvents = new CDTSPackageEvents(); if (NULL == pDTSPackageEvents) { throw; } hr = pDTSPackage2->QueryInterface(IID_IConnectionPointContainer, (void**) &pCPC); hr = pCPC->FindConnectionPoint(IID_IDTSPackageEvents, &pCP); hr = pCP->Advise(pDTSPackageEvents, &dwCookie); if (BAD_COOKIE == dwCookie) { // throw } pCPC->Release(); pCPC = NULL; // // End - Setup events hr = pDTSPackage2->Execute(); // Begin - Cleanup events // hr = pCP->Unadvise(dwCookie); pCP->Release(); pCP = NULL; pDTSPackageEvents = NULL; // // End - Cleanup events hr = pDTSPackage2->UnInitialize(); pDTSPackage2->Release(); // Free the interface pDTSPackage2 = NULL; delete pDTSPackageEvents; } catch(_com_error pCE) { DisplayError(pCE); pDTSPackage2->Release(); // Free the interface pDTSPackage2 = NULL; } } } catch(_com_error pCE) { DisplayError(pCE); } OleUninitialize(); } else { _tprintf(_T("Call to CoInitialize failed.\n")); } return (0); } // ********************************************************************** // display error information // ********************************************************************** void DisplayError(_com_error & pCE) { _tprintf(_T("\n%s Error: %ld\r\n") _T("%s\r\n") _T("%s\r\n"), (TCHAR*)pCE.Source(), pCE.Error(), (TCHAR*)pCE.Description(), (TCHAR*)pCE.ErrorMessage()); }