如何为 COM Interop 库生成 C# 源代码而不是程序集?
导入 COM 库(直接使用 tlbimp 或间接使用 Visual Studio 添加引用对话框)时,有没有办法生成 C# 源代码而不是二进制互操作程序集(例如 Interop.Word.dll)?
UPD:反射器是个坏主意。问题是对于com接口来说不仅是签名,还有成员的顺序。反射器此命令被违反
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我将继续使用 TLBIMP 生成互操作程序集,并使用 Reflector 对其进行反汇编。正如您将看到的,互操作程序集没有实际的实现代码。然后,您只需将代码(或所需的 CoClass 和接口)复制并粘贴到项目中的新 .cs 文件中即可。
I would go ahead and generate the interop assembly using TLBIMP, and the use Reflector to disassemble it. The interop assembly has no actual implementation code, as you will see. You can then just copy and paste the code (or the CoClasses and interfaces you need) into a new .cs file in your project.
您无法直接生成 C#,但如果您真正的问题是需要调整互操作库,那么您可能会更幸运地使用 Codeplex 上的 CLR Interop 团队的自定义 TLBIMP 工具 - 它非常灵活,并且您拥有完整的源代码 [ .]
http://clrinterop.codeplex.com/releases/view/17579
更新:如果您确实想避免传送二进制文件,那么您可以集成将上述工具(源格式)添加到您的项目中,以便您在运行时生成此互操作库。结果?没有要发送的二进制文件。
You cannot generate C# directly, but if your real problem is that you have a need to tweak the interop library then you might have better luck using the CLR Interop team's custom TLBIMP tool on codeplex - it's pretty flexible and you have full source [to it.]
http://clrinterop.codeplex.com/releases/view/17579
Update: If you're really trying avoid shipping binaries, then you could feasibly integrate the above tool (in source format) into your project so that you generate this interop library at runtime. Result? No binaries to ship.
一般来说是做不到的。 C# 不支持创建工作互操作程序集所需的所有可能构造。您不能将例如属性添加到 C# 中的
返回类型或方法参数,尽管有时需要它们来帮助编组器正确转换某些 C++ 类型。你的,
阿洛伊斯·克鲁斯
In general it cannot be done. C# does not support all possible constructs needed to create a working interop assembly. You cannot add e.g. attributes to
return types ormethod parameters in C# although they are needed sometimes to help the marshaller to correctly translate some C++ types.Yours,
Alois Kruas