这些是用于互操作还是用于 COM 编码

本文关键字:用于 COM 编码 互操作 | 更新日期: 2023-09-27 18:36:44

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

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

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

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

这些是用于互操作还是用于 COM 编码

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

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

要查看包装的 COM 对象的定义,您可以做的一件事是运行"OleView.exe"。它是Windows SDK的一部分,将向您展示Windows系统中的所有COM类,接口和类型库。您可能还必须使用注册表编辑来查找与 GUID 关联的类 ID。执行此操作时,您将能够看到的是 COM 库接口的 C 定义,而不是实现。如果你需要弄清楚某些东西是如何实现的,你可以像IDA这样的dissembler。