如何在 c++ 中获取 C# 程序集的 GUID(程序集属性)
我正在尝试从 c++ (VC++ 10) 读取 C#.net 程序集的 GUID 属性。
我应该提到的是,我不想使用 .net 或 .net 反射。寻找一种纯C++的方式。
解决办法是什么?
提前致谢。
I am trying to read GUID attribute of a C#.net assembly from c++ (VC++ 10).
I should mention that, I don't want to use .net or .net reflection. looking for a pure c++ way.
what is the solution ?
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您需要使用非托管元数据 API
,尤其是IMetaDataImport::EnumCustomAttributes 方法
这将是一项相当艰巨的工作...这是一个链接这提供了一个很好的起点(它是 C#,但思想完全相同,并且实际上更容易用 C++ 编程): 从程序集中读取类型
You need to use the Unamanaged Metadata API
and especially the IMetaDataImport::EnumCustomAttributes Method
That's going to be quite a work... Here is a link that gives a good starting point on this (it's C#, but the ideas are exactly the same, and is in fact easier to program in C++): Reading types from assembly
查看 CodeProject 上的.NET 文件格式 MetaSection。
Check out the The .NET File Format MetaSection over at CodeProject.
我了解您不想使用反射或.net。
但是,您确实希望从使用 .NET 构建的 C# dll 中获取 GUID。
C# 开发人员向基于 COM 的开发人员提供其类库的常见方法是使用 tlbexp.exe(类型库导出)工具导出类型库文件。
然后,COM 开发人员可以在其 COM 代码中使用 .tlb 文件。
当 C# 开发人员构建 dll 时,他们要么手动将 Guid 放入 AssemblyInfo 级别(在 .NET 中),要么编译器在构建 dll 时自动生成 Guid。
展示如何构建 COM 客户端 (C++) 以使用 COM 服务器 (C#)
http://msdn.microsoft.com/en -us/library/aa645738%28v=vs.71%29.aspx
注意,本文中引用了另一个工具regasm.exe,它注册dll,同时可以导出tlb,但不是必须的要以开发人员身份在系统上注册 dll
,您只需使用 tlb 文件
i understand you don't want to use reflection or .net.
You do however want to get the GUID from a C# dll you have, that was built with .NET.
The common way C# developers make their class libraries available to COM-based developers is to use the tlbexp.exe (type library export) tool to export a type library file.
The COM-developer can then use the .tlb file in their COM code.
When the C# developer builds the dll they either put the Guid manually in the AssemblyInfo level (in .NET) or the compiler will generate the Guid automatically when building the dll.
show how the COM client (C++) is built to use the COM server (C#)
http://msdn.microsoft.com/en-us/library/aa645738%28v=vs.71%29.aspx
note that in this article refers to another tool regasm.exe which registers the dll and can export the tlb at the same time but it is not necessary to register the dll on your system
as a developer you can just use the tlb file