我有一个用VB 6.0开发的应用程序。我无法访问其代码。此应用程序还通过其dll中提供的某些API公开其功能。有没有办法让我检查此应用程序API的消费者在部署API的任何地方调用API的方法。我希望C#程序只是坐在那个目标环境中,拦截对该API的调用,并通过服务将其报告给我的服务。我不会修改API或调用API的代码。这在C#中是可行的还是我需要使用C ++?
更新
为了简单起见,我们说它是一个简单的VB应用程序,在VB 6中开发,名为SimpleAPP,它有一个按钮,用于在网格中显示记录。它通过使用公共方法GetRecords(字符串ID)调用组件CMPA.dll来执行此操作,该方法返回记录数组。我有另外几个名为CustomerApp.exe和AnotherCustomerApp.exe的应用程序,它们也有对CMPA.dll的引用,并且它们都调用相同的方法来获取记录。现在,我想开发一个名为Interceptor.exe的程序,该程序实际上将位于部署CustomerApp和AnotherCustomerApp的环境中,并将在内部记录这两个应用程序中的哪一个称为CMPA dll的公共方法GetRecords并记录哪个参数它被发送并检索了什么结果。
答案 0 :(得分:5)
我不得不谷歌找到我的舌头上的图书馆。
这篇谷歌搜索发现了一些有趣的文章:1999年微软研究报告的一篇名为“Intercepting and Instrumenting COM Applications”的新文章,以及1999年1月的一篇微软系统期刊文章,我记得,“Building a Lightweight COM Interception Framework”。
您想要的库可能是Microsoft Detours。我只使用它来自C ++,而不是来自C#,我只使用它来拦截对Windows API函数的调用,而不是COM方法,所以我无法保证它非常适合。但如果需要的话,将这两种语言联系起来并不完全是火箭科学。
如果Detours不能满足您的需求,请查看引用的文章。很可能他们导致了一些你可以使用的框架。否则他们就拥有了建立自己所需的信息。然后,您可以查看ParkPlace是否曾制作您想要的产品。我曾经记得曾经对“交叉关注”功能产生了浓厚兴趣,而ParcPlace做了一些最有趣的研究。