COM dll 没有被刷新

发布于 2024-09-19 07:10:17 字数 949 浏览 20 评论 0原文

我正在与我的 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 下部窗格的 DLL 视图。

这表明由于某种原因我的 COM dll 没有从系统中清除。

I am interacting with a custom COM component called CSCCOM in my c# project.

I am wrapping it with IDisposable as below:

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

Once the program is executed, I still see CSCCOM.dll twice in the ProcessExplorer's lower pane's DLL view.

This suggests that for some reason my COM dll is not getting flushed out of the system.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心的位置 2024-09-26 07:10:37

以下是 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);
}

Here is what needed to be modified in 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);
}
迎风吟唱 2024-09-26 07:10:33

很长时间没有 COM,但在我看来,您从未

                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 释放 cscl 或代码变量,导致 RCW 计数没有递减并使 dll“浮动”

Long time no COM, but it seems to me you are never releasing the cscl or code vars in

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

with ReleaseComObject, resulting in RCW counts not being decremented and making the dll "float around"

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文