如何生成Interop.xxxxx.dll?

问题描述 投票:5回答:1

我最近接手了一个项目,几乎没有VS COM经验,所以如果我问的不是正确的问题,请原谅我。

我有一个生成COM dll的C ++项目,将其命名为abc.dll。

我还有一个引用COM dll的C#项目,但是在引用下,它指向Interop.abc.dll。我删除了目录和interrop.abc.dll中的所有abc.dll,以查看项目的反应,启动项目后,interop.abc.dll会自动生成。这让我感到困惑,因为我不知道如何生成interop.abc.dll。

所以这是我的问题:

  1. 如果生成此代码,C#项目最初如何引用interop.abc.dll?

  2. 如果没有abc.dll开头,我是如何生成interop.abc.dll的(我创建了它)]] >>

  3. 我玩了这个项目,然后interop.abc.dll停止生成并导致错误,为什么?

  4. 我最近接手了一个项目,对VS COM的经验很少,所以如果我问的不是正确的问题,请原谅我。我有一个生成COM dll的C ++项目,命名为abc.dll。我...

COM声明存储在类型库中。 因此,.NET团队决定,当类型库内容与.NET元数据的匹配程度不足够时,转换应该是一个单独的步骤,可以显示警告或错误。该转换工具是Tlbimp.exe,即类型库导入工具。他们

did

将此功能添加到“项目+添加引用”对话框中。只要转换不产生任何警告就可以了。它经常这样做。

因此Tlbimp.exe和在添加引用的情况下,IDE的工作是将类型库内容机械地转换为.NET元数据内容。按照约定,名为“ Foo”的类型库将转换为“ Interop.Foo.dll”。不一定要是默认名称。您最终将获得一个.NET程序集,其中不包含任何代码,而仅包含元数据。任何.NET编译器都可以直接使用的.NET类型,否则将与类型库声明匹配。 [ComImport]属性非常重要,它告诉CLR元数据实际上是针对COM类型的。

所有这些都解释了项目符号1。项目符号2是不行的,您确实需要类型库。 Tlbimp.exe经常将它作为资源嵌入非托管DLL中,它知道如何找到它。没有人可以看到3中的错误,因此毫无疑问是什么问题。请记住,转换并非总是没有麻烦,这是使转换步骤明确的关键。

c# c++ visual-studio dll com
1个回答
8
投票

COM声明存储在类型库中。 因此,.NET团队决定,当类型库内容与.NET元数据的匹配程度不足够时,转换应该是一个单独的步骤,可以显示警告或错误。该转换工具是Tlbimp.exe,即类型库导入工具。他们

did

将此功能添加到“项目+添加引用”对话框中。只要转换不产生任何警告就可以了。它经常这样做。

© www.soinside.com 2019 - 2024. All rights reserved.