为什么我的COM方法返回不正确的值?

时间:2009-06-30 19:41:11

标签: .net com mfc

我有一个COM方法,它返回一个MFC CRect

GetMFCRect(LONG* pRect)
*((CRect*)pRect) = m_currentRect;

在我的.NET应用程序中,我尝试以下操作:

int pointer = new int();
Rectangle rc;
IntPtr pIntResult;
unsafe
{
    int* p = &pointer;
    _COMobj.GetMFCRect(ref *p);
    pIntResult = new IntPtr(p);
    rc = (Rectangle)Marshal.PtrToStructure(pintResult, typeof(Rectangle));
}

rc的值不正确。这段代码有什么问题?

谢谢!

1 个答案:

答案 0 :(得分:1)

AFAIK,Rectangle是一个相当简单的结构,没有来自CRect的转换或转换;你所看到的那些值,很可能是m_currentRect的VTable中的指针 作为一种可能的解决方案,我会传递一个更安全的GDI RECT结构,或直接传递四个坐标。