ÇóÈçºÎÔÚdelphiÖÐʹÓÃDirectShowÖÐµÄ IAMErrorLog
ÔÚDelphiÖÐʵÏÖÁËÒ»¸öDirectShowµÄDES³ÌÐò£¬ÏÖÔÚ·¢ÏÖ³ÌÐòÓÐЩСÎÊÌ⣬ÏëʹÓÃDirectShowÖÐÌṩµÄ´íÎ󻨵÷»úÖÆ½øÐв鿴£¬µ«²»ÖªÈçºÎ²ÅÄÜÕýȷʹÓã¬Çë´óÏÀÖ§ÕС£
È·ÇеÄ˵£¬Ó¦¸ÃÊÇÈçºÎ½«C£«£«Àà·Òë³ÉDelphiµÄ´úÂ룬¸ÃÀàÊÇDirectShowÖеÄÒ»¸öʾÀý£¬ÀàÈçÏ£º
C/C++ code:
ÀàÉùÃ÷
class CErrReporter : public IAMErrorLog
{
protected:
long m_lRef; // reference count
public:
CErrReporter() { m_lRef = 0; }
// IUnkown
STDMETHOD( QueryInterface( REFIID, void** ) );
STDMETHOD_(ULONG, AddRef() );
STDMETHOD_(ULONG, Release() );
// IAMErrorLog
STDMETHOD( LogError(...) );
}
²¿·ÖʵÏÖ
STDMETHOD CErrReporter::QueryInterface( REFIID riid, void **ppv )
{
if( ppv == NULL ) return E_POINTER;
*ppv = NULL;
if( riid == IID_IUnknown )
*ppv = static_cast<IUnknown*>(this);
else if( riid == IID_IAMErrorLog )
*ppv = static_cast<IAMErrorLog*>(this);
else
return E_NOINTERFACE;
AddRef();
return S_OK;
}
....
лл£¬·Ö²»¹»µÄ»°¿ÉÁíÍ⿪Ìù¡£
À´Ñ§Ï°Ò»Ï£¬
Ïà¹ØÎÊ´ð£º
Õâ¸öÊÇÀ¹½Ø°´¼üÏûÏ¢²¢²âÊÔÊÇ·ñΪENTER¼ü¡£
begin
case wParam of
WM_KEYDOWN:
fEatKeystroke := (p.vkCode = VK_RETURN);
& ......
ÎÒдÁ˸öС³ÌÐò£¬ÉÏÃæÌí¼ÓÁËÒ»¸öshockwaveflash¿Ø¼þ£¬È»ºóÔÚmovieÀïдÈëswfÎļþµÄ·¾¶£¬È»ºóÖ´ÐÐûÓÐÎÊÌâ¡£
µ±ÎÒ°ÑÕâ¸ö³ÌÐò×ªÒÆµ½Áíһ̨µçÄÔÖ´ÐÐʱ£¬ shockwaveflash ¿Ø¼þÏÔʾ¿Õ°×¡£Ò²¾ÍÊÇûÓмÓÔØÄǸöswfÎļþ¡£ ......
ÓÉÓÚ¿Í戶¶ËÓеÄÎļþ經³£¸üУ¨遠³ÌµÄ£¬²»ÊǾÖÓò網£©£¬
ËùÒÔÏë寫個×Ô動¸üÐ嵀 ³ÌÐò¡£
¿´網É쵀 ·½·¨資ÁÏ£¬ÖªµÀЩ·½·¨£¬µ«²»ÖªµÀ¾ß體Ôõô寫¡£
......
Çë½Ì¸÷·¸ßÊÖ¡£ÎäÁÖǰ±²¡£ÎÒ½«B.EXE×ö³É×ÊÔ´Îļþ£¬È»ºó¼Óµ½123.dllÖС£ÓÃA.EXEÀ´µ÷ÓÃ123.dllÖеÄB.EXE
Çë¸÷λǰ±²°ïæָ½ÌÏ¡£A.exeÈçºÎÀ´µ÷ÓÃdllÖеÄexe£¿´úÂëÓÖ¸ÃÈçºÎд£¿
ÏȰÑb.exe»¹Ô³öÀ´ÔÚµ÷Óã¬Ó¦¸ÃÊÇ× ......