确定互操作函数调用者
本文关键字:函数调用 调用者 函数 互操作 | 更新日期: 2023-09-27 18:18:59
我正在使用这些属性向COM暴露c#类:
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
[GuidAttribute("2325EBEB-DB5F-4D29-B220-64845379D9C5")]
[ComSourceInterfaces(typeof(WrapperEvents))]
在这个类中,我有一个函数:
关闭服务
这个函数意味着通过COM互操作从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团队来说还不够。知道怎么证明函数吗?
您可以尝试以下几种方法:
- 在代码中设置一个断点来触发调试器,然后查看调用堆栈。你可以在这里做一个应用程序转储从visual studio发送给他们或者截图堆栈。
交货。调试器。打破
http://www.netsplore.com/PublicPortal/blog.aspx?EntryID=12使用" save Dump As"进行转储http://msdn.microsoft.com/en-us/library/d5zhxt22.aspx
- 使用com跟踪从系统级别看http://support.microsoft.com/kb/926098
我还记得visual studio 6中安装的一个工具也可以做到这一点