0

我有下面的代码,但我不知道它是什么意思或它是如何工作的。

我只知道它调用了函数,而这些都只是声明,那么我在哪里可以找到这段代码的定义呢?

   [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();
    } 

我可以使用相同的方法从其他应用程序调用函数吗?

4

2 回答 2

2

它是由 Tlbimp.exe 工具自动生成的声明。来自 COM 组件的类型库。该方法的实现隐藏在一些本机 DLL 中,您几乎可以肯定没有源代码。如果该组件已正确注册,那么您可以通过使用 Regedit.exe 在注册表中找到它。

导航到 HKCR\Classes\CLSID 并查找您在声明中看到的 {guid}。InProcServer32 键给出了 DLL 的路径。您可以使用 OleView.exe 工具查看 DLL 中的类型库。这将告诉您从 Tlbimp 生成的声明中您已经知道的内容。如果您需要支持来解决问题,请联系 COM 组件的所有者。

于 2012-06-11T15:22:50.897 回答
0

要查看包装的 COM 对象的定义,您可以做的一件事是运行“OleView.exe”。它是 Windows SDK 的一部分,将向您展示 Windows 系统中的所有 COM 类、接口和类型库。您可能还必须使用 RegEdit 来查找与 GUID 关联的类 ID。当您这样做时,您将能够看到的只是 COM 库接口的 C 定义,而不是实现。如果您需要弄清楚某些东西是如何实现的,您可以使用反汇编程序,例如 IDA。

于 2012-06-11T14:35:32.720 回答