自作DirectShow Filterのinterface定義
DirectShow Filterを自作しGraphEdit上で動作することを確認しました。
しかしC++プログラム上から独自定義のメソッドを呼び出すと
呼び出し元と先で呼び出し規約が異なるというエラーが出てしまいます。
定義は
DEFINE_GUID(CLSID_MyClass,
<<適当なGUID1>>);
DEFINE_GUID(IID_IMyClass,
<<適当なGUID2>>);
MIDL_INTERFACE("<<適当なGUID2>>")
IMyClass : public IUnknown
{
STDMETHOD(myMethod)(void) PURE;
};
class CMyClass : public CTransInPlaceFilter
{
CMyClass ::CMyClass (IUnknown * pOuter, HRESULT * phr, BOOL ModifiesData);
CMyClass ::~CMyClass ();
public:
static CUnknown *WINAPI CMyClass::CreateInstance(LPUNKNOWN punk, HRESULT *phr);
DECLARE_IUNKNOWN;
STDMETHODIMP CMyClass::myMethod(void){return S_OK;};
}
呼び出し元では
DEFINE_GUID(CLSID_MyClass,
<<適当なGUID1>>);
DEFINE_GUID(IID_IMyClass,
<<適当なGUID2>>);
MIDL_INTERFACE("<<適当なGUID2>>")
IMyClass : public IUnknown
{
STDMETHOD(myMethod)(void) PURE;
};
int main()
{
CoInitialize(NULL);
IMyClass pMyClass;
CoCreateInstance(
CLSID_MyClass,
NULL,
CLSCTX_INPROC,
IID_IMyClass,
(LPVOID *)&pMyClass
);
pMyClass->myMethod();←ここでエラー
・
・
(略)
・
・
}
エラーメッセージは
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
です。
どちらも__stdcallになってるはずなんですが…
原因が分かる方おられましたらよろしくお願いいたします。