4

我需要以 64 位从 COM 获取 RECT 到 C#,所以我在 IDL 中定义了一个简单的方法:

[id(23), helpstring("method GetRect")] HRESULT GetRect([out,retval] RECT* pRect);

并在 C++ 中实现为

STDMETHODIMP CSpot::GetRect(RECT* pRect)
{
CRect rec = get_position(); 
*pRect = rec;
return S_OK;
}

我在 C# 中调用为:

tagRECT rec = pSpot.GetRect();

大多数时候都可以,但有时我会得到 0xC0000005:访问冲突写入位置 0x0000000000000000。

排队:

*pRect = rec;

什么可能导致此异常?

4

1 回答 1

0

不确定这是否是您的问题,但是当从 COM 方法使用 RECT 时,我需要“定义”RECT 对象,如下所示:

[StructLayout(LayoutKind.Sequential, Pack = 0)]
public struct RECT
{
    public int left;
    public int top;
    public int right;
    public int bottom;
}
于 2013-06-19T08:57:26.473 回答