COM dll не вымывается - PullRequest
       29

COM dll не вымывается

1 голос
/ 09 сентября 2010

Я взаимодействую с пользовательским COM-компонентом CSCCOM в моем проекте c #.

Я обертываю его с помощью 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) { );

После выполнения программы я все еще вижу CSCCOM.dll дважды в представлении DLL нижней панели ProcessExplorer .

Это говорит о том, что по какой-то причине мой COM dll не выходит из системы.

Ответы [ 2 ]

3 голосов
/ 09 сентября 2010

Долгое время нет 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 "плавает"

0 голосов
/ 09 сентября 2010

Вот что нужно изменить в 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);
}

Надеюсь, это кому-нибудь поможет!

...