Я выставляю класс 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. Любая идея, как действительно доказать, где функция?