3

我一直在关注一组教程(比如这个)来创建一个简单的 COM 服务器对象。

假设我有一个简单的 hello world:

[ComVisible(true)]
[Guid("392930B3-9CD0-4247-8C69-83168D1C8F77")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("nathanr.HellowWorldCom")]
class HelloWorldCom : IHelloWorldCom
{
    public int HelloWorld()
    {
        Console.WriteLine("Hello World!");
        return 1;
    }
}

使用同样简单的界面:

[ComVisible(true)]
[Guid("C08205BE-1393-4070-AE57-FA47F0D653C3")]
interface IHelloWorldCom
{
    [DispId(1)]
    int HelloWorld();
}

当然,不能忘记AssemblyInfo.cs文件:

...
[assembly: ComVisible(true)]
[assembly: AssemblyKeyFile("HelloWorldCOM.snk")]
...

问题是当我构建HelloWorldCom.dll并尝试注册它时,regasm只是对我伸出舌头:

RegAsm : warning RA00000 : No types were registered.

为了覆盖我的基地,我打开Regedit并搜索了ProgID. 它不在那里,老实说,这并不奇怪。

我错过了一些明显的东西吗?

整个测试项目是一个更大的(实际上有用的)设置的一部分,该设置也未能注册。

4

2 回答 2

8

这将是一个很长的答案:添加公共

 public class HelloWorldCom : IHelloWorldCom
于 2013-05-29T19:46:49.273 回答
0

可能有几个问题:

  1. 您选择的 .net 框架不正确。就我而言,我试图用 2.0 框架注册 dll,而不是 64 位 4.0 框架

  2. 您的 DLL 未公开。

希望能解决您的问题。

干杯

于 2013-11-06T11:12:32.393 回答