当前位置: 首页 > 编程语言 > C#

在VisualStudio2010Express中自动从dll生成C#包装类?

时间:2023-04-10 20:38:23 C#

在VisualStudio2010Express中自动从dll生成C#包装器类?我的一位同事告诉我,VisualStudio允许一个人指向一个.dll并自动神奇地生成一个C#包装器类。这真的可能吗?如果是这样,如何实现?我浏览了网页,但无法提出任何建议!谢谢你们!我想我也会分享这些资源,有3种情况:DLL表示托管程序集=>你直接在你的项目中引用它并使用它DLL表示COM对象=>你可以使用tlbimp.exe实用程序生成托管包装DLL意味着一些An导出函数的非托管库。那是最艰难的。没有工具。您必须查阅库的文档以了解导出的函数名称和参数,并构建托管的P/Invoke包装器。您可以使用dumpbin.exe实用程序查看导出函数的列表。这是MSDN上有关不同步骤的文章。没有DLL可以做到这一点。只是实现COM服务器的非常具体的类型。转换器需要导出类型的良好描述,这些描述由此类服务器的类型库提供。类型库与托管程序集中的元数据完全相同。尽管它开始时是一个独立文件(.tlb文件),但它通常作为资源嵌入到DLL中。这是使类型描述靠近实现它的代码的好地方。就像.NET程序集中的元数据一样。使用一些工具查看类型库(不确定它是否适用于Express):在VisualStudio中使用File+Open+File并选择c:\windows\system32\shell32.dll。您将看到该DLL中的资源,请注意TYPELIB节点。这是类型库。它是二进制的,所以实际阅读它是不切实际的。为此,请从VisualStudio命令提示符运行OleView.exe。File+ViewTypelib并选择相同的DLL。将类型库反编译回IDL,即最初用于创建类型库的接口描述语言。可读性强,您将很难理解该语言。并且很容易看出.NETTlbimp.exe如何将该类型库转换为等效的C#声明。类型库很旧,它们从1996年就存在了。最初由Microsoft的VisualBasic团队设计,作为VBX的替代品,16位VB扩展模型。它们非常成功,几乎所有Windows编译器都支持它们。但是它们的表达能力有限,不支持泛型、继承等内容。值得注意的是,Windows8团队已经更换了WinRT的类型库。他们选择了.NET元数据格式。我知道这个问题已经很老了,似乎已经得到了足够的回答,但我只是想补充一个我认为可能很重要的想法。我可能完全错了,所以如果我错了,请用我的答案纠正我。为了能够调用DLL中的成员/字段,必须以某种形式访问调用它们所需的信息。此信息应该是编写包装器所需的全部信息。有了它,您可以确定所有成员/字段“表单”,也就是方法标头等。在C#中,可以加载DLL并通过反射获取该信息。我不知道上面描述的不同DLL类型,但正如我所说,要调用成员/字段,该信息必须以某种形式存在。因此,使用反射获取该信息,您可以生成一个新类,比如“prefixOriginalName”,并使其具有与原始类相同的成员/字段,调用原始类的成员/字段并添加额外的功能你需要。因此每个DLL(或相关文档)都会为您提供有关使用其类型的信息。即所有实现为“公共”的东西您可以通过反射访问所需的信息给定1.和2.,您可以创建一个程序,从DLL中提取所需的信息并相应地生成包装器。正如我所说,我对此不是100%确定,因为其他答案让我觉得这可能太难,甚至出于某种原因不可能。以上就是C#学习教程:AutomaticallygenerateC#wrapperclassesfromdllinVisualStudio2010Express?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: