我正在尝试编组以下 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);
}