gpt4 book ai didi

c# - VS2010 COM 互操作错误解决方法? (INetFwMgr)

转载 作者:行者123 更新时间:2023-11-30 15:08:24 24 4
gpt4 key购买 nike

(编辑:已解决,解决方案很简单 - 在 2008SP1 中构建,采用生成的 Interop.NetFwTypeLib.dll 并将其用作第 3 方程序集。谢谢 Rick Sladkey。)

我已经将一些引用 COM 对象的代码(在下方)升级到 VS 2010。仍在 .Net 3.5 上。
从那时起构建就中断了:(找不到类型或命名空间名称“INetFwMgr”(是否缺少 using 指令或程序集引用?))...

我找到了一个 Microsoft bug ,有人说:

SDK 4.0 tlbimp.exe always imports the first one, it doesn't follow the correct stream. Even if you manually call tlbimp.exe and give the correct path. This is the root cause of the problem. Any COM dll that resides in a non-default stream will have same problem with tlbimp.exe of 4.0.

然后是:

SDK 3.5 tlbimp.exe doesn't have this problem. A work around is to use 3.5 tlbimp.exe to manually import the Interop assembly from the full path as it is stored in registry and the reference this Interop assembly in your projects.

有人可以解释解决方法吗? (我尝试了明显的 tlbimp COM_DLL/out=OUT_DLL,但效果不佳)。

有人在另一个 COM 上遇到过这个问题吗?

谢谢!

注意:XP...
另一个注意事项:也尝试过 VS2010 SP1,但没有成功。

代码(部分...):

using NetFwTypeLib;

namespace Utils
{
public class MSFirewall
{
private const string CLSID_FIREWALL_MANAGER = "{304CE942-6E39-40D8-943A-B913C40C9CD4}";

private NetFwTypeLib.INetFwMgr GetFirewallManager()
{
Type objectType = Type.GetTypeFromCLSID(new Guid(CLSID_FIREWALL_MANAGER));
return Activator.CreateInstance(objectType) as NetFwTypeLib.INetFwMgr;
}


}
}

最佳答案

您的 VS2010 解决方案可以成功地利用互操作库,例如:

  • Interop.NetFwTypeLib.dll

使用实用的 VS2008 解决方案生成或使用旧版 SDK 工具手动创建。

如果您使用的是源代码管理,那么只需使用 VS2008 生成互操作库一次并将其 checkin ,然后将 VS2010 解决方案的引用添加到 checkin 的互操作库,而不是导航到 COM 组件。

关于c# - VS2010 COM 互操作错误解决方法? (INetFwMgr),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5653170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com