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);
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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;	
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
/*
 * 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;
}
Esempio n. 6
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;
   }

}
Esempio n. 7
0
/*
 * 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;
   }

}
Esempio n. 8
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;

}
Esempio n. 9
0
/*
 * 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;
   }

}