如何为 COM Interop 库生成 C# 源代码而不是程序集?

发布于 2024-11-11 15:59:35 字数 164 浏览 2 评论 0 原文

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

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

When importing a COM library (either directly with tlbimp, or indirectly with visual studio add reference dialog,) is there a way to generate C# source code instead of a binary interop assembly, like Interop.Word.dll, for example?

UPD: Reflector is bad idea. Problem is that for the com interface is not only a signature, but the order of the members. Reflector this order is violated

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

迷途知返 2024-11-18 15:59:35

我将继续使用 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.

久随 2024-11-18 15:59:35

您无法直接生成 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.

青芜 2024-11-18 15:59:35

一般来说是做不到的。 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 or method parameters in C# although they are needed sometimes to help the marshaller to correctly translate some C++ types.

Yours,
Alois Kruas

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文