在下面,您可以看到一些用于枚举可用多路复用器的虚拟代码。在我的系统上只有一个多路复用器(如预期的那样)。 当我调用MFTEnumEx()时,函数成功,但堆栈被破坏。这就是我添加64k缓冲区的原因。将在偏移量16处写入16个字节。我在两台具有相同结果的不同计算机上尝试了此代码(Windows 10)。有人可以解释一下吗?
BYTE buff[ 65536 ];
HRESULT hr;
hr = CoInitialize( NULL );
ATLASSERT( SUCCEEDED( hr ) );
hr = MFStartup( MF_VERSION, MFSTARTUP_FULL );
ATLASSERT( SUCCEEDED( hr ) );
IMFActivate ** ppActivate = NULL;
UINT numActivate = 0;
hr = MFTEnumEx( MFT_CATEGORY_MULTIPLEXER,
MFT_ENUM_FLAG_SYNCMFT | MFT_ENUM_FLAG_ASYNCMFT | MFT_ENUM_FLAG_HARDWARE |
MFT_ENUM_FLAG_FIELDOFUSE | MFT_ENUM_FLAG_LOCALMFT | MFT_ENUM_FLAG_TRANSCODE_ONLY,
NULL,
NULL,
&ppActivate,
&numActivate );