导入 COM 库(直接使用 tlbimp,或间接使用 Visual Studio 添加引用对话框)时,是否有办法生成 C# 源代码而不是二进制互操作程序集,例如 Interop.Word.dll?
UPD:反射器是个坏主意。问题是对于com 接口来说不仅仅是一个签名,而是成员的顺序。反射器这个命令被违反了
导入 COM 库(直接使用 tlbimp,或间接使用 Visual Studio 添加引用对话框)时,是否有办法生成 C# 源代码而不是二进制互操作程序集,例如 Interop.Word.dll?
UPD:反射器是个坏主意。问题是对于com 接口来说不仅仅是一个签名,而是成员的顺序。反射器这个命令被违反了
我将继续使用 TLBIMP 生成互操作程序集,并使用Reflector对其进行反汇编。如您将看到的,互操作程序集没有实际的实现代码。然后,您可以将代码(或您需要的 CoClass 和接口)复制并粘贴到项目中的新 .cs 文件中。
您不能直接生成 C#,但如果您的真正问题是您需要调整互操作库,那么使用 CLR Interop 团队在 codeplex 上的自定义 TLBIMP 工具可能会更好 - 它非常灵活并且您拥有完整的源代码 [to it .]
http://clrinterop.codeplex.com/releases/view/17579
更新:如果您真的想避免发送二进制文件,那么您可以将上述工具(以源格式)集成到您的项目中,以便在运行时生成此互操作库。结果?没有要发送的二进制文件。
一般是做不到的。C# 不支持创建工作互操作程序集所需的所有可能构造。您不能在 C# 中将属性添加到返回类型或方法参数,尽管有时需要它们来帮助编组器正确转换某些 C++ 类型。
你的,阿洛伊斯克鲁斯