COM dll没有被刷新

时间:2010-09-09 16:55:01

标签: c# com pinvoke dllimport

我正在与我的c#项目中名为CSCCOM的自定义COM组件进行交互。

我用IDisposable包装它如下:

Form1.cs的

try {
    using (CSCCOMWRAP CSC = new CSCCOMWRAP()) {
        CSCCodeList CSCL = new CSCCodeList(CSC);

        comboBox1.DataSource = CSCL.List;

        Marshal.ReleaseComObject(CSCL);
    }
}
catch (COMException ex) { }

CSCCodeList.cs

try {
    var cscl = CSC.GetCodes();

    for (int i = 1; i <= cscl.Count(); i++) {
        object item = i;
        var code = cscl.Item(ref item);

        List.Add(new CSCCode((string)code.Name, Convert.ToString(code.Code)));
    }
}
catch (Exception ex) { );

程序执行后,我仍会在ProcessExplorer's下方窗格的DLL视图中看到CSCCOM.dll 两次

这表明由于某种原因,我的COM dll不会被冲出系统。

2 个答案:

答案 0 :(得分:3)

很长一段时间没有COM,但在我看来你永远不会发布cscl或代码变量

                var cscl = CSC.GetCodes();

                for (int i = 1; i <= cscl.Count(); i++) {
                    object item = i;
                    var code = cscl.Item(ref item);

                    List.Add(new CSCCode((string)code.Name, Convert.ToString(code.Code)));

使用ReleaseComObject,导致RCW计数没有减少并使dll“浮动”

答案 1 :(得分:0)

以下是 CSCCodeList.cs 中需要修改的内容:

try {
    var cscl = CSC.GetCodes();

    for (int i = 1; i <= cscl.Count(); i++) {
        object item = i;
        var code = cscl.Item(ref item);

        List.Add(new CSCCode((string)code.Name, Convert.ToString(code.Code)));

        Marshal.ReleaseComObject(code);
    }

    Marshal.ReleaseComObject(cscl);
}

希望它有所帮助!

相关问题