次の C++ 関数をマーシャリングしようとしています。
STDMETHODIMP CPushSource::SetSize(SIZE *pSize)
{
CMutexLock lock(&m_csShared);
CheckPointer(pSize, E_POINTER);
m_iImageWidth = pSize->cx;
m_iImageHeight = pSize->cy;
saveSettings();
return S_OK;
}
次の C# コードを使用します。
[ComImport, Guid("1b1afbaf-cb92-42da-8307-5a7be8c2b4b0")]
public interface ISCFHSettings
{
[PreserveSig]
int SetSize([In, MarshalAs(UnmanagedType.Struct)] Size size);
}
私は次のコードでそれを呼び出そうとしています:
m_desktopFilter.SetSize(new Size(320,240));
私はこの C++/C# 相互運用機能については初めてなので、正しい方向に向けてくれる人は誰でも大歓迎です。
また、私が得ているエラーは次のとおりです。
保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。
これは、DirectShow フィルターの単純なラッパーでの私の試みです。フィルターはSCFH-DSFです。
私も試しました
[ComImport, Guid("1b1afbaf-cb92-42da-8307-5a7be8c2b4b0")]
public interface ISCFHSettings
{
[PreserveSig]
int SetSize([In, MarshalAs(UnmanagedType.Struct)] MySize size);
}
[StructLayout(LayoutKind.Sequential)]
public struct MySize
{
public int cx;
public int cy;
}
そして呼び出しコードで
MySize sz = new MySize();
sz.cx = 320;
sz.cy = 240;
m_desktopFilter.SetSize(sz);
これも私にはうまくいきません。
[ComImport, Guid("1b1afbaf-cb92-42da-8307-5a7be8c2b4b0")]
public interface ISCFHSettings
{
[PreserveSig]
int SetSize(ref MySize size);
}