【问题标题】:COM dll is not being flushed outCOM dll 没有被刷新
【发布时间】:2010-09-09 16:55:00
【问题描述】:

我正在与我的 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 没有从系统中清除。

【问题讨论】:

  • 您删除这个问题有什么特别的原因吗?通常只会删除无用的问题,而这个问题显然不是无用的。
  • 谢谢@mmyers。请问你的名字是什么?
  • @mmyers:我同意。但我认为我过度暴露了我的代码。但我觉得我应该编辑它而不是删除它。感谢您对我的这一行为的批评 :) 我真的为此向 MrDosu 道歉。
  • 由于这是一个老问题,一些反馈给你 - 希望对你有帮助,月亮!我注意到你的问题很健谈,有时可以通过使它们更简洁来简化它们。这节省了读者(需要阅读的内容更少)和编辑(需要修剪的聊天内容)的时间。
  • 以下都可以去掉,一般来说:谢谢,提前致谢,问候,sig blocks,表示你需要帮助,希望人们可以帮助,敦促人们帮助,表示帮助会很好,担心问题太简单,说你不理解问题等等。它们要么是显而易见的,要么是不必要的。短而甜在这里很好:-)

标签: c# com pinvoke dllimport


【解决方案1】:

好久没有 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 “浮动”

【讨论】:

  • 我是怎么错过的?非常感谢您指出 :) 真的很感激 :)
  • 因为 COM 是一种虐待狂的黑魔法,旨在折磨进步的那种;p
【解决方案2】:

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);
}

希望对某人有所帮助!

【讨论】:

    猜你喜欢
    • 2010-10-05
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    相关资源
    最近更新 更多