Определение функции взаимодействия вызывающей стороны - PullRequest
1 голос
/ 28 декабря 2011

Я выставляю класс C # для COM, используя эти атрибуты:

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
[GuidAttribute("2325EBEB-DB5F-4D29-B220-64845379D9C5")]
[ComSourceInterfaces(typeof(WrapperEvents))]

в этом классе у меня есть функция:

public void shutdownService ()

Эта функция должна вызываться только один раз из клиента VB6 через COM Interop. Все отлично работает Но почему-то его называют не раз. Мои коды C # не вызывают эту функцию напрямую. Я предполагаю, что проблема в коде VB6. К сожалению, это не то, что думает команда VB6. Есть ли способ определения вызывающей стороны этой функции, т.е. из моего кода C # или кода VB6?

Сейчас я использую простую функцию для получения трассировки стека:

    public void LogStack()
    {
        var trace = new System.Diagnostics.StackTrace();
        foreach (var frame in trace.GetFrames())
        {
            var method = frame.GetMethod();
            if (method.Name.Equals("LogStack")) continue;
            logger.Debug(string.Format("LogStack: {0}::{1}",
                method.ReflectedType != null ? method.ReflectedType.Name : string.Empty, method.Name));
        }
    }

Очевидно, что я получил что-то подобное в журнале:

2011-12-23 08:28:40,067 1          DEBUG (null) LogStack: Service::shutdownService

Поскольку единственной строкой LogStack является функция COM, я предполагаю, что она вызывается из vb6. Но этого недостаточно для команды VB6. Любая идея, как действительно доказать, где функция?

1 Ответ

1 голос
/ 28 декабря 2011

Вы можете попробовать несколько вещей:

  • установите точку останова в вашем коде для запуска отладчика, затем посмотрите на стек вызовов. Вы можете сделать дамп приложения здесь из Visual Studio и отправить его им или сделать скриншот стека.

ех. Debugger.Break

http://www.netsplore.com/PublicPortal/blog.aspx?EntryID=12

Дамп с "Savre Dump As" http://msdn.microsoft.com/en-us/library/d5zhxt22.aspx

Я также вспоминаю, что инструмент, устанавливаемый вместе с Visual Studio 6, делает то же самое.

...