【问题标题】:How to Call COM unmanaged code at Runtime from C#.NET using ITypeLib and ITypeInfo?如何在运行时使用 ITypeLib 和 ITypeInfo 从 C#.NET 调用 COM 非托管代码?
【发布时间】:2011-02-19 04:02:01
【问题描述】:

我需要从 C#.NET 调用非托管 COM 代码。通过从 (LoadTypeLibEx) 加载非托管 COM 类型库,我能够通过 COM TLB 遍历所有公开的类型。我需要知道在运行时调用这些公开方法的地址,或者通过访问 COM vtable 的起始地址并应用索引来获取接口下这些公开方法的地址。

【问题讨论】:

标签: c# com unmanaged managed vtable


【解决方案1】:

只是一个建议:

创建一个代理非托管 COM 服务器,它只使用一组固定的方法来为您完成这项工作,而不是在您的 c# 应用程序中使用此代理服务

【讨论】:

  • 编写代理非托管 COM 服务器非常困难。我不需要为每个作为 DLL/EXE 的非托管二进制文件的 COM EXE/DLL 生成代码。我只需要在运行时枚举所有类型及其公开的方法,并且在运行时我需要通过从 vtable 访问它们的地址来调用公开的方法。无代码生成
  • 只有一个 com 服务器,但能够枚举请求的 dll 的所有类型和方法。使用 ATL 枚举 COM 对象 (IDispatch) 方法? stackoverflow.com/questions/2112302/…
  • 我的想法是你可以用非托管代码做到这一点,然后通过 COM 接口将此信息提供给 c# 客户端
  • 其实我在 System.Runtime 下找到了 InterOpServices 命名空间。这使您能够准确枚举非托管二进制文件中包含的所有类型。那么为什么要使用非托管代码来编写这个。我希望最大限度地利用 .NET 功能。只剩下一件事了。只是在运行时使用我正在搜索的地址调用这些函数...
猜你喜欢
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多