トップ回答者
C++/CLI のinterface class の質問です。

質問
-
[ComImport] [Guid(L"a3d8cec0-7e5a-11cf-bbc5-00805f6cef20")] public interface class IAMovieSetup: IUnknown { public: virtual HRESULT CLRMETHODCALLTYPE Register( void) ; virtual HRESULT CLRMETHODCALLTYPE Unregister( void) ; }; public struct Win32Api { public: [DllImport("ole32.dll")] static HRESULT CoCreateInstance([In] Guid^% rclsid, [In] IUnknown^ pUnkOuter,[In] DWORD dwClsContext, [In] Guid% riid, [Out] void** ppv); }; int main(array<System::String ^> ^args) { Attribute^ IAMovieSetupAttribute = Attribute::GetCustomAttribute( IAMovieSetup::typeid, GuidAttribute::typeid ); Guid g = Guid(dynamic_cast<GuidAttribute^>(IAMovieSetupAttribute)->Value); Type^ IAMtype =Type::GetTypeFromCLSID(g); if(IAMtype->IsCOMObject){ Console::WriteLine("IsCOMObject == true"); } /* Win32Api::CoCreateInstance(gcnew Guid("CDA42200-BD88-11d0-BD4E-00A0C911CE86"), nullptr, (DWORD)CLSCTX::CLSCTX_INPROC_SERVER, IFMtype->GUID, (void*)&pIFM);*/ }
上記のようなコードで、CoCreateInstanceを使ってインスタンスを作成したいのですが、戻り値を見ると マイナスの値が返ってきて(要は失敗)しまいます。どのようにしたらインスタンス化できますか。 どなたかご教示くださいください。
回答
すべての返信
-
>戻り値を見ると マイナスの値が返ってきて(要は失敗)しまいます。
Error Codeを記述してください。
また、環境も記述してください。そもそもCLSID_FilterMapper2はIAMovieSetupをSupportしていません。
また、COM InteropではCoCreateInstanceを呼ばなくてよいです。COM Interopについては、以下を参考にしてください。
C#で記述されていますので、C++/CLIに置き換えてください。
或いは、C++ Interopを利用してください。[COM 相互運用性 - 第 1 部 : C# クライアント チュートリアル]
http://msdn.microsoft.com/ja-jp/library/aa288455(VS.71).aspxところで、IAMovieSetupはFilter実装側のInterfaceで、しかもdeprecatedですが、何をしたいのでしょうか?
また、Vista以降Direct ShowはMedia Foundationに置き換わりつつあります。