我正在使用以下属性向COM公开C#类:
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
[GuidAttribute("2325EBEB-DB5F-4D29-B220-64845379D9C5")]
[ComSourceInterfaces(typeof(WrapperEvents))]
在这个课程中我有一个功能:
public void shutdownService()
此函数只能通过COM Interop从VB6客户端调用一次。一切正常。但不知何故,它不止一次被召唤。我的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团队。任何想法如何真正证明功能在哪里?
答案 0 :(得分:1)
您可以尝试以下几种方法:
离。 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安装的工具也是这样做的