void OleStorageOnDiskImpl::Open(const std::wstring& fileName) { USES_CONVERSION; IStorage* pStorage = 0; HRESULT hr = ::StgOpenStorage(T2COLE(fileName.c_str()), 0, STGM_READWRITE|STGM_SHARE_EXCLUSIVE, 0, 0, &pStorage); if(FAILED(hr)) { std::wostringstream msg; switch (hr) { case STG_E_FILEALREADYEXISTS: msg << _T("File [") << fileName.c_str() << _T("] exists but is not a storage object.") << std::ends; ThrowComException(msg.str().c_str(), hr); case STG_E_FILENOTFOUND: case STG_E_PATHNOTFOUND: msg << _T("File [") << fileName.c_str() << _T("] not found.") << std::ends; break; default: msg << _T("Error occurred opening storage on file [") << fileName.c_str() << _T("].") << std::ends; break; } ThrowComException(msg.str().c_str(), hr); } m_spStorage = IStoragePtr(pStorage, false); }
void OleProperties::DeleteProperty(unsigned long id) { IPropertySetStoragePtr spPropertySetStorage(m_pStorage.GetInternalObject()); IPropertyStorage* pPropertyStorage = 0; HRESULT hr = spPropertySetStorage->Open(FMTID_UserDefinedProperties, STGM_READWRITE | STGM_SHARE_EXCLUSIVE, &pPropertyStorage); if(STG_E_FILENOTFOUND == hr) return; IPropertyStoragePtr spPropertyStorage(pPropertyStorage, false); PROPSPEC propSpec; ZeroMemory(&propSpec, sizeof(PROPSPEC)); propSpec.ulKind = PRSPEC_PROPID; propSpec.propid = id; hr = pPropertyStorage->DeleteMultiple(1, &propSpec); if(FAILED(hr)) ThrowComException(L"Failed to delete the property values", hr); hr = pPropertyStorage->DeletePropertyNames(1, &propSpec.propid); if(FAILED(hr)) ThrowComException(L"Failed to delete the property name", hr); hr = spPropertyStorage->Commit(STGC_OVERWRITE); if(FAILED(hr)) ThrowComException(L"Failed to persist the changes", hr); }
std::vector<Metawall::IMWMetadataElementPtr> ElementRatings::GetMetaDataElementsFromRating(const CStdString& sXML, const CStdString& sRating) { Metawall::IMWMetadataElementsPtr pElements; HRESULT hRes = pElements.CreateInstance(__uuidof(Metawall::CMetadataElements)); if (FAILED(hRes)) ThrowComException(_T("Failed to create a Metadata Elements object"), hRes); pElements->SelectNoElements(); LogMetadataElements(pElements, _T("Logging all elements")); std::vector<CStdString> vElements = GetChildNodes(sXML, sRating); std::vector<CStdString>::iterator itCurrent = vElements.begin(); std::vector<Metawall::IMWMetadataElementPtr> vMetaDataElements; while (itCurrent != vElements.end()) { CStdString sElement = GetMWElementFromXML(*itCurrent); vMetaDataElements.push_back(pElements->Item[sElement.c_str()]); itCurrent++; } LogMetadataElements(pElements, _T("Logging elements after enabling for selected rating")); return vMetaDataElements; }
void OleProperties::SaveProperty(OleProperty* pProperty) { USES_CONVERSION; IPropertySetStoragePtr spPropertySetStorage(m_pStorage.GetInternalObject()); IPropertyStorage* pPropertyStorage = 0; HRESULT hr = spPropertySetStorage->Open(FMTID_UserDefinedProperties, STGM_READWRITE | STGM_SHARE_EXCLUSIVE, &pPropertyStorage); if(STG_E_FILENOTFOUND == hr) { hr = spPropertySetStorage->Create( FMTID_UserDefinedProperties, NULL, PROPSETFLAG_ANSI, STGM_CREATE|STGM_READWRITE|STGM_SHARE_EXCLUSIVE, &pPropertyStorage ); } if(FAILED(hr)) { std::wostringstream os; os << _T("Failed to open the property set. PropertySet ID:[") << FMTID_UserDefinedProperties << _T("].") << std::ends; ThrowComException(os.str().c_str(), hr); } IPropertyStoragePtr spPropertyStorage(pPropertyStorage, false); PROPSPEC propSpec; ZeroMemory(&propSpec, sizeof(PROPSPEC)); propSpec.ulKind = PRSPEC_LPWSTR; propSpec.lpwstr = T2OLE((LPTSTR)pProperty->Name.c_str()); PROPVARIANT propVar; PropVariantInit(&propVar); propVar.vt = VT_LPWSTR; propVar.pwszVal = (LPWSTR)&(pProperty->Value[0]); hr = spPropertyStorage->WriteMultiple(1, &propSpec, &propVar, PID_FIRST_USABLE); if(FAILED(hr)) ThrowComException(L"Write property changes failed.", hr); hr = spPropertyStorage->Commit(STGC_OVERWRITE); if(FAILED(hr)) ThrowComException(L"Commit property changes failed.", hr); }
/* * Class: com_argus_activex_DispatchUtils * Method: GetHWND * Signature: (Ljava/awt/Component;)I */ JNIEXPORT jint JNICALL Java_com_argus_activex_DispatchUtils_GetHWND (JNIEnv * env, jclass clazz, jobject canvas) { try { jobject parent = canvas; jobject tmp = canvas; while (tmp != NULL) { jclass clazz = env->GetObjectClass(parent); jmethodID mid = env->GetMethodID(clazz, "getParent", "()Ljava/awt/Container;" ); tmp = env->CallObjectMethod(tmp, mid); if (tmp != NULL) parent = tmp; env->DeleteLocalRef(clazz); } // find top level window PARAM * param = createPARAM(env, parent); if (EnumWindows(enumWindows, (LPARAM) param)) { HWND hWndParent = param->hWnd; delete param; param = 0; // find child window param = createPARAM(env, canvas); if (EnumChildWindows(hWndParent, enumWindows, (LPARAM) param)) { HWND hWndChild = param->hWnd; //cout << "Top level window: " << hWndParent << ", Child window: " << hWndChild << endl; delete param; param = 0; return (jint) hWndChild; } } else { ThrowComException( env, DISP_E_EXCEPTION, "FAILED to EnumWindows with Canvas Object." ); } delete param; param = 0; } catch (...) { ThrowComException( env, DISP_E_EXCEPTION, "FAILED to CreateObjectCOM with Canvas Object." ); } return 0; }
/* * Class: com_argus_activex_DispatchUtils * Method: GetJava2COMVersion * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_argus_activex_DispatchUtils_GetJava2COMVersion (JNIEnv * env, jclass clazz) { if ( env->ExceptionOccurred() ) return NULL; try { return env->NewStringUTF( version ); } catch (...) { ThrowComException( env, DISP_E_EXCEPTION, "FAILED to _GetJava2COMVersion." ); return NULL; } }
/* * Class: com_argus_activex_DispatchUtils * Method: GetActiveObject * Signature: (Ljava/lang/String;)I */ JNIEXPORT jint JNICALL Java_com_argus_activex_DispatchUtils_GetActiveObject (JNIEnv * env, jclass clazz, jstring clsid) { if ( env->ExceptionOccurred() ) return 0; try { IDispatch * pDisp = 0; HRESULT hr = GetRunningActiveObject(env, clazz, clsid, &pDisp); if (SUCCEEDED(hr)) { //cache(pDisp); // ??? return (jint) pDisp; } // FAILED ThrowComException( env, hr, "FAILED to GetActiveObject." ); return 0; } catch (...) { ThrowComException( env, DISP_E_EXCEPTION, "FAILED to GetActiveObject." ); return 0; } }
HRESULT JNICALL GetRunningActiveObject (JNIEnv * env, jclass clazz, jstring clsid, IDispatch ** ppDisp) { // jstring to char const char * utfChars = env->GetStringUTFChars( clsid, NULL ); UBSTR lpsz(utfChars); env->ReleaseStringUTFChars(clsid, utfChars); // wchar_t to CLSID GUID guid; HRESULT hr = CLSIDFromString( lpsz, &guid ); if ( FAILED( hr ) ) { //ThrowComException( env, hr, "CLSIDFromString(...) FAILED!" ); //return hr; //WINOLEAPI CLSIDFromProgID (IN LPCOLESTR lpszProgID, OUT LPCLSID lpclsid); hr = CLSIDFromProgID( lpsz, &guid ); if ( FAILED( hr ) ) { ThrowComException( env, hr, "CLSIDFromString/CLSIDFromProgID(...) FAILED!" ); return hr; } } IUnknown * pItf = 0; hr = GetActiveObject( guid, 0, &pItf ); if ( FAILED( hr ) ) { return hr; } //*ppDisp = 0; hr = pItf->QueryInterface(IID_IDispatch, (void**)ppDisp); pItf->Release(); return hr; }
/* * Class: com_argus_activex_DispatchUtils * Method: IsServerRunning * Signature: (Ljava/lang/String;)Z */ JNIEXPORT jboolean JNICALL Java_com_argus_activex_DispatchUtils_IsServerRunning (JNIEnv * env, jclass clazz, jstring clsid) { if ( env->ExceptionOccurred() ) return JNI_FALSE; try { /* HRESULT hr; // jstring to char const char * utfChars = env->GetStringUTFChars( clsid, NULL ); // char to wchar_t wchar_t lpsz[1024]; bool res = ustrncpy( lpsz, utfChars, 1024 ); env->ReleaseStringUTFChars( clsid, utfChars ); if ( !res ) { ThrowComException( env, DISP_E_EXCEPTION, "CreateObject(...) ustrncpy(...) FAILED!" ); return JNI_FALSE; } IRunningObjectTable * prot = 0; hr = GetRunningObjectTable( 0 , &prot ); if ( FAILED(hr) ) { ThrowComException( env, hr, "GetRunningObjectTable(...) FAILED!" ); return JNI_FALSE; } IBindCtx * pbc = 0; hr = CreateBindCtx(0, &pbc); if ( FAILED(hr) ) { ThrowComException( env, hr, "CreateBindCtx(...) FAILED!" ); return JNI_FALSE; } const OLECHAR * pwsz = lpsz;//OLESTR("clsid:000209FF-0000-0000-C000-000000000046:"); ULONG cchEaten; IMoniker * pmnk = 0; //WINOLEAPI MkParseDisplayName(IN LPBC pbc, IN LPCOLESTR szUserName, // OUT ULONG FAR * pchEaten, OUT LPMONIKER FAR * ppmk); hr = MkParseDisplayName(pbc, pwsz, &cchEaten, &pmnk); if ( FAILED(hr) ) { ThrowComException( env, hr, "MkParseDisplayName(...) FAILED!" ); return JNI_FALSE; } cout << "cchEaten=" << cchEaten; hr = prot->IsRunning(pmnk); return hr == S_OK; //*/ IDispatch * pDisp = 0; HRESULT hr = GetRunningActiveObject(env, clazz, clsid, &pDisp); if (FAILED(hr)) { return JNI_FALSE; } pDisp->Release(); return JNI_TRUE; } catch (...) { ThrowComException( env, DISP_E_EXCEPTION, "FAILED to IsServerRunning." ); return JNI_FALSE; } }