Показать сообщение отдельно
Старый 16.10.2009, 23:40
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Под виндой для ActiveX-плеера это сделать можно, за другие платформы не скажу.. Кстати, не припомню ни одной оболочки, где бы это было возможно, разве что у f-in-box что-то было похожее, не уверен. Посмотрите на сайте f-in-box.com, правда он платный.
Ну, а так, вобщем-то, плеер реализует COM-интерфейс IPersistStream, у него есть метод Load(), собственно, стрим ему надо подсунуть с данными из ресурсов и все. В подписи у меня была вроде ссыль на кусок с++ - кода в ветке форума codeproject.com. Да вот он, как пример c использованием ATL-библиотеки:
Код:
// это один из методов моего класса, хостящего флэш-контрол
LRESULT CFlashHost::LoadMovieFromResource(UINT id, WCHAR* type)
{
	HRESULT hr = S_FALSE;
	HRSRC hResource = FindResource(hModule, MAKEINTRESOURCE(id), type);
	HGLOBAL hResourceData = LoadResource(hModule, hResource);
	LPVOID lpResourceData = LockResource(hResourceData);
	DWORD dwResourceSize = SizeofResource(hModule, hResource);
	HGLOBAL hGlobalData = GlobalAlloc(GPTR, dwResourceSize+8);
	LPBYTE pMem = (LPBYTE)GlobalLock(hGlobalData);
	((long*)pMem)[0] = 0x55665566; // что это такое мне до конца не понятно, но без этих байтов не грузится
	((long*)pMem)[1] = dwResourceSize;
	CopyMemory((void*)(&(pMem[8])), lpResourceData, dwResourceSize);
	IStream* pStream = 0;
	hr = CreateStreamOnHGlobal(hGlobalData, TRUE, &pStream);
	if(SUCCEEDED(hr))
	{
		hr = m_spPlayer->QueryInterface(IID_IUnknown, (void**)&m_spUnknown);
		CComQIPtr<IPersistStreamInit> pPersistStream(m_spUnknown);
		if(pPersistStream)hr = pPersistStream->Load(pStream);
		pStream->Release();
		pStream = 0;
	}
	return hr;
}