c# - 与 COM 引用(版本 1.0 类型库)和 VS 2010 相关的生成警告

标签 c# ole

我刚刚完成了将一堆 C# 项目从 Visual Studio 2008 重组和升级到 Visual Studio 2010 的工作。此外,所有项目都更改为以 .NET 4.0 运行时为目标。一切都成功构建,但是,我现在收到一堆与我的应用程序所依赖的 COM 引用相关的警告。下面是警告之一。每次构建解决方案时,我都会收到将近 100 条类似于以下警告的警告。

Warning 60  Type library importer encountered a property getter 'ClearTopCardQue' on type 'FuelDirectOLETLB.FuelDirectOLE' without a valid return type.  The importer will attempt to import this property as a method instead. c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets  1558    9   FDServer

我已调用编写我引用的对象的第 3 方供应商,但无济于事。他们建议我确保我的目标是 x86。他们还表示我应该能够针对任何版本的 .NET 运行时构建我的项目。就我个人而言,我怀疑这与我在 Visual Studio 2010/.NET Runtime 4.0 中引用版本 1 类型库有关,而在我构建 VS 2008/.NET Runtime 3.5 之前。我已经尝试针对所有构建配置(即 x86、x64、任何 Cpu)进行构建,并尝试将运行时的每个版本恢复到 2.0。这些警告令我担心,因为我不确定它们表示什么。有人可以提出任何建议/建议来帮助我找到这些警告的原因吗?

最佳答案

这是一个良性警告,无需担心。他们只是没有正确编写组件的 IDL。 COM 中的属性 getter 是方法,就像它们在 .NET 中一样。该方法必须具有正确的签名和属性才能被视为可以直接转换为 .NET 属性的有效属性。

这有时是笨手笨脚的。 Windows Media Player 就是一个很好的例子。从临时目录中的 Visual Studio 命令提示符运行此命令:

  Tlbimp.exe c:\windows\system32\wmp.dll

你会看到:

TlbImp : warning TI0000 : Type library importer encountered a property getter 'sessionPlaylistCount' on type 'WMPLib.IWMPNowPlayingHelperDispatch' without a valid return type. The importer will attempt to import this property as a method instead.
Type library imported to WMPLib.dll

下一个类型:

  Oleview.exe c:\windows\system32\wmp.dll

将类型库反编译回 IDL。在右 Pane 中选择文本并将其复制/粘贴到文本编辑器中。找到“sessionPlaylistCount”,您会看到:

[id(0x00000ba3), propget]
HRESULT sessionPlaylistCount([out] long* pVal);

当您将它与其他属性进行比较时,您会发现错误,它们忘记了 [retval] 属性。

这不是问题,因为 Tlbimp.exe 只会使它成为一个方法而不是一个属性。您将编写 get_sessionPlaylistCount(out count) 来使用损坏的属性。这很不方便,因为语法很笨拙,但不是问题。

关于c# - 与 COM 引用(版本 1.0 类型库)和 VS 2010 相关的生成警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15796731/

相关文章:

java - 连接到 Excel 时出现 "Unable to recognize OLE stream"异常

multithreading - Delphi 从 2 个不同的线程访问 OleObject

vba - 将 OLEObject 显示为默认图标

c# - 图片上传不损失质量

excel - 为什么 VBA 中的每个类都有一个 Application 属性?

c# - 如何根据默认样式制作圆边按钮样式

c# - 如何返回带有数组和列表的单个对象?

c++ - Outlook - 从显示名称获取电子邮件地址。适用于 Python,不适用于 C

c# - 在 VS2010 中创建 WCF 项目时,我得到 "Error : WcfProject.csproj cannot be opened. The project type is not supported by this installation"

c# - 动态数据显示 : Change X-Axis date time format for graph