【问题标题】:How can I generate C# source code for a COM Interop library instead of an assembly?如何为 COM 互操作库而不是程序集生成 C# 源代码?
【发布时间】:2011-09-06 08:58:49
【问题描述】:

当导入 COM 库(直接使用 tlbimp,或间接使用 Visual Studio 添加引用对话框)时,有没有办法生成 C# 源代码而不是二进制互操作程序集,例如 Interop.Word.dll?

UPD:反射器是个坏主意。问题是对于com接口来说不仅仅是一个签名,而是成员的顺序。反射器这个命令被违反了

【问题讨论】:

  • 你的问题有点不清楚。您是否尝试查看 DLL 中的代码?...并将其转换为 c#?...会很难处理。 =)
  • 我知道他在说什么 - 我已经更新了标题和问题,使其更加清晰。如果您仍然不明白,那么您要么是在面子上,要么您不知道非托管互操作的蹲点。
  • 致 x0n:谢谢。你完全了解我

标签: c# com-interop tlbimp


【解决方案1】:

我会继续使用 TLBIMP 生成互操作程序集,并使用 Reflector 来反汇编它。如您将看到的,互操作程序集没有实际的实现代码。然后,您可以将代码(或您需要的 CoClass 和接口)复制并粘贴到项目中的新 .cs 文件中。

【讨论】:

  • 不,问题是com接口不仅是签名,还有成员的顺序。反射这个命令被违反了。
  • 然后手动重新排序。毕竟你有源代码。 Reflector 只是向您展示 TLBIMP 生成的内容,它不会生成任何其他内容。
  • 尝试将他的建议付诸实践 :(
【解决方案2】:

您不能直接生成 C#,但如果您的真正问题是您需要调整互操作库,那么使用 CLR Interop 团队在 codeplex 上的自定义 TLBIMP 工具可能会更好 - 它非常灵活并且您拥有完整的源代码[给它。]

http://clrinterop.codeplex.com/releases/view/17579

更新:如果您真的想避免发送二进制文件,那么您可以将上述工具(以源格式)集成到您的项目中,以便在运行时生成此互操作库。结果?没有要发送的二进制文件。

【讨论】:

  • 谢谢,但我需要 c# 而不是 dll :(
  • 为什么需要源码?我已经根据上述内容用另一个想法更新了我的答案。
  • 在哪里?在记忆中?你明白这是另一对拐杖:(
  • 我不明白为什么MS没有让生成源成为可能?可能有付费产品?
【解决方案3】:

一般来说是做不到的。 C# 不支持创建工作互操作程序集所需的所有可能构造。您不能添加例如C# 中 返回类型或方法参数的属性,尽管有时需要它们来帮助编组器正确转换某些 C++ 类型。

你的, 阿洛伊斯·克鲁斯

【讨论】:

猜你喜欢
  • 2010-11-06
  • 1970-01-01
  • 2010-12-14
  • 2011-05-13
  • 2010-10-02
  • 1970-01-01
  • 2010-09-27
  • 2011-02-21
  • 2011-04-11
相关资源
最近更新 更多