|
Quick links:
F-IN-BOX DLL Edition Home Page
| Buy license
| Welcome to our forum!
| Ask your question
| Help on the Web
F-IN-BOX DLL Edition Help >> Extensions >> Functions FPC_AddOnLoadExternalResourceHandler
Syntax
[ C++ ]
typedef HRESULT (WINAPI *PLOAD_EXTERNAL_RESOURCE_HANDLER)(LPCTSTR lpszURL, IStream** ppStream, HFPC hFPC, LPARAM lParam); DWORD WINAPI FPC_AddOnLoadExternalResourceHandler(HFPC hFPC, PLOAD_EXTERNAL_RESOURCE_HANDLER pHandler, LPARAM lParam); Description
Adds new handler. This handler is calling when flash loads external resource by full path. Don't forget to remove the handler using FPC_RemoveOnLoadExternalResourceHandler. You can provide the content inside the handler by changing the passed pointer.
[ C++ ]
m_dwHandlerCookie =
FPC_AddOnLoadExternalResourceHandler(hFPC,
&OnLoadExternalResourceHandler,
0);
HRESULT WINAPI OnLoadExternalResourceHandler(LPCSTR lpszURL, IStream** ppStream, HFPC hFPC)
{
HRESULT hr = E_FAIL;
if (0 == lstrcmpiA(lpszURL, "http://FLV/FlashVideo.flv"))
{
IStream* pMemStream = NULL;
CreateStreamOnHGlobal(NULL, TRUE, &pMemStream);
while (...)
pMemStream->Write(...);
*ppStream = pMemStream;
hr = S_OK;
}
return hr;
}
You can provide the content inside the handler by writing to the passed IStream:
[ C++ ]
m_dwHandlerCookie =
FPC_AddOnLoadExternalResourceHandler(hFPC,
&OnLoadExternalResourceHandler,
0);
HRESULT WINAPI OnLoadExternalResourceHandler(LPCSTR lpszURL, IStream** ppStream, HFPC hFPC)
{
HRESULT hr = E_FAIL;
if (0 == lstrcmpiA(lpszURL, "http://FLV/FlashVideo.flv"))
{
while (...)
(*ppStream)->Write(...);
hr = S_OK;
}
return hr;
}
If the size of resource is big, you can provide content in a separate thread:
[ C++ ]
m_dwHandlerCookie =
FPC_AddOnLoadExternalResourceHandler(hFPC,
&OnLoadExternalResourceHandler,
0);
HRESULT WINAPI OnLoadExternalResourceHandler(LPCSTR lpszURL, IStream** ppStream, HFPC hFPC)
{
HRESULT hr = E_FAIL;
if (0 == lstrcmpiA(lpszURL, "http://FLV/FlashVideo.flv"))
{
IStream* pStream = *ppStream;
IStream* pStreamForMarshalling;
CoMarshalInterThreadInterfaceInStream(IID_IStream, pStream, &pStreamForMarshalling);
DWORD dwThreadId;
HANDLE hThread = CreateThread(NULL, 0, &FlashContentProviderThread, (LPVOID)pStreamForMarshalling, 0, &dwThreadId);
CloseHandle(hThread);
return S_ASYNCHRONOUS;
}
return hr;
}
DWORD WINAPI FlashContentProviderThread(LPVOID lpParameter)
{
CoInitialize(NULL);
IStream* pStreamForMarshalling = (IStream*)lpParameter;
IStream* pStream;
CoUnmarshalInterface(pStreamForMarshalling, IID_IStream, (void**)&pStream);
while (...)
{
if (S_OK != pStream->Write(...))
break;
}
pStreamForMarshalling->Release();
pStream->Release();
CoUninitialize();
return 1;
}
Copyright © 2004 - 2008 Softanics. All rights reserved. F-IN-BOX is a trademark of Softanics. Macromedia and Shockwave Flash are trademarks of Adobe
Quick links:
F-IN-BOX DLL Edition Home Page
| Buy license
| Welcome to our forum!
| Ask your question
| Help on the Web
|