簡體   English   中英

ReleaseComObject在靜態方法中不起作用

[英]ReleaseComObject does not work in static method

在測試代​​碼時,我遇到了一種奇怪的行為。

這個:

if (_sampGrabber != null)
{
    Marshal.ReleaseComObject(_sampGrabber);
    _sampGrabber = null;
}

產生_sampGrabber == null,而之后

ReleaseIfNotNull(_sampGrabber);

_sampGrabber在使用時仍具有原始值

public static int ReleaseIfNotNull(object comObject)
{
    int hr = 0;

    if (comObject != null)
    {
        hr = Marshal.ReleaseComObject(comObject);                
        comObject = null;
    }
    return hr;
}

_sampGrabber是DirectShow SampleGrabber篩選器接口。

我對這種行為的解釋很感興趣。 使用Visual Studio測試框架編寫測試時,我碰到了它。

如果需要更改引用,則需要更改簽名,如下所示:

public static int ReleaseIfNotNull(ref object comObject)

comObject內部ReleaseIfNotNull的本地引用更改為僅影響其自己的(堆棧)副本,而不影響對其的任何其他引用。 MSDN上的refout

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM