gpt4 book ai didi

c# - 更改 COM 类的 ProgID

转载 作者:行者123 更新时间:2023-12-01 23:12:51 26 4
gpt4 key购买 nike

我正在用 C# 创建一个 COM 组件。安装后,其 ProgID 表示为 <Namespace>.<Classname> 。但我想把它改成<Vendor>.<ClassName>.<VersionNumber> .

如何在 C# 中执行此操作。我使用的是 Visual Studio 2010。

最佳答案

MS 声明:

ProgIds are automatically generated for a class by combining the namespace with the type name, separated by a dot.

这不是真的,因为根据我的经验,ProgId 是由项目名称和类组合而成的。由于默认的命名空间是项目的名称,所以MS的说法似乎是正确的,但如果更改命名空间的名称,ProgId不会相应改变。

MS 继续:

This can produce an invalid ProgId however, as ProgIds are limited to 39 characters and can contain no punctuation other than a period [I think: only one period]. In such case, a ProgId can be manually assigned to the class using ProgId Attribute.

所以,在我看来,你只能在这种情况下更改ProgId,在正常情况下设置ProgId是没有用的,它永远是ProjectName.ClassName。

在下面的示例中,我通过选择 Dietrich.Math 作为项目名称来尝试使用 Dietrich.Math.ClassName 的 ProgId,但没有成功:Dietrich.Math 更改为 Dietrich_Math。正如预期的那样,ProgId 属性被 .NET 忽略,并且 ProgId 仍设置为 Dietrich_Math.Arithmetic。

using System;
using System.Runtime.InteropServices;

namespace Dietrich.Math
{
[ComVisible(true), Guid("B452A43E-7D62-4F11-907A-E2132655BF97")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IArithmetic
{
int Add(int a, int b);
}

[ComVisible(true), Guid("17A76BDC-55B7-4647-9465-3D7D088FA932")]
[ProgId("SimpleMath.Whatever")]
[ClassInterface(ClassInterfaceType.None)]
public class Arithmetic : IArithmetic
{
public int Add(int a, int b) { return a + b; }
}
}

关于c# - 更改 COM 类的 ProgID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24883277/

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