繁体   English   中英

COM 引用“XyzLib”是 ActiveX 控件“AxXyzLib”的互操作程序集,但被标记为由编译器使用 /link 标志链接

[英]COM Reference 'XyzLib' is the interop assembly for ActiveX control 'AxXyzLib' but was marked to be linked by the compiler with the /link flag

我正在引用一个用 C++ 编写的 OCX 控件,该控件针对 .NET 3.5 C# DLL 中的本机 x86 代码。 我收到此非严重错误消息。 正在寻找如何摆脱它。 我已经在网上搜索过,但到目前为止我找到的参考资料没有帮助。

COM 参考 'SIGPLUSLib' 是 ActiveX 控件 'AxSIGPLUSLib' 的互操作程序集,但被标记为由编译器使用 /link 标志链接。 此 COM 引用将被视为引用,不会被链接。

我已经查看了引用SigPlusLibAxSigPlusLib的属性,但我没有看到任何地方将它们中的任何一个标记为与 /link 标志链接。

我看过的链接无济于事

链接1

链接2

link3这个建议将嵌入互操作设置为 false,但我没有在 SigPlusLib 或 AxSigPlusLib 的属性中找到该选项。 在此处输入图片说明

为何“嵌入互操作类型”选项在参考属性窗口中不可用的原因显然是由于使用如此旧的 .NET 版本 (3.5) 构建 DLL。 我升级了 C# DLL 以使用 .NET 4.7.2,并且Embed Interop Types选项可用,并显示在 SigPlusLib 中该选项设置为 TRUE。 一旦我将其设置为 FALSE,错误消息就消失了。 当我将控件添加到我的表单时,互操作包装器是自动生成的,而第二个“SigPlusLib”在 Visual Studio 自动生成时默认设置了嵌入选项。

当您直接从 C# 或 VB.NET 使用 OCX 时,就会发生这种情况。

要解决这个问题,您必须切换到使用 OCX 供应商提供的 PIA(主要互操作程序集)进行编程。

例如,Microsoft 为 Office 提供 PIA。
Office 主要互操作程序集

但是,OCX 供应商并不总是提供 PIA。
请询问您的 OCX 供应商。

或者,您可以使用 tlbimp.exe 创建您自己的 PIA,即使供应商没有提供。
但是,不建议这样做,因为它会在供应商功能改进或错误修复发生时重新设计。

如果您或您的公司是 OCX 供应商,那么创建和提供 PIA 将是正确的做法。

请参阅以下内容。
主要互操作程序集
生产主要互操作程序集
生成主要互操作程序集
Tlbimp.exe(类型库导入程序)
使用主互操作程序集编程

与非托管代码互操作
将 COM 组件暴露给 .NET Framework


或者,您无法检查名称或类型,但在 .NET 4 之后,使用动态类型不需要对 ocx 的引用。
新的 C# 动态类型如何简化对后期绑定 COM 对象的访问

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM