我有以下代码,但我不知道它的含义或工作原理。
我只知道它调用函数,这些都只是声明,所以我在哪里可以找到这段代码的定义?
[ComImport, Guid("341A80AC-5FC6-4B$6-8380-4D70279300CZ"), TypeLibType((short) 2), ClassInterface((short) 0)]
public class WjbJobClass : abc, xyz
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x20)]
public virtual extern int somefunction();
}
我可以使用相同的方法从其他应用程序调用函数吗?
答案 0 :(得分:2)
这是一个由Tlbimp.exe工具自动生成的声明。从COM组件的类型库。该方法的实现隐藏在一些本机DLL中,您几乎肯定没有源代码。如果该组件已正确注册,则可以通过使用Regedit.exe查看注册表来找回它。
导航到HKCR \ Classes \ CLSID并查找您在声明中看到的{guid}。 InProcServer32键提供DLL的路径。您可以使用OleView.exe工具查看DLL中的类型库。这将告诉你几乎从Tlbimp生成的声明中已经知道的内容。如果需要支持来解决问题,请与COM组件的所有者联系。
答案 1 :(得分:0)
要查看包装的COM对象的定义,您可以执行的一项操作是“OleView.exe”。它是Windows SDK的一部分,将向您显示Windows系统中的所有COM类,接口和类型库。您可能还必须使用RegEdit来查找与GUID关联的类ID。当您执行此操作时,您将能够看到COM库的接口的C定义,而不是实现。如果你需要弄清楚某些东西是如何实现的,那么就像IDA一样,你可以使用一个解析器。