将.Net暴露给COM

时间:2013-08-21 14:09:40

标签: c# com com-interop

我尝试在VB6中使用一些.Net功能。我已经学过几个教程。我使用下面的公式成功编写了一个测试程序:http://www.codeproject.com/Articles/3511/Exposing-NET-Components-to-COM

但是,当我尝试使用我的实际项目时,我的ProgId不会像我的测试文件一样显示在注册表中。我确定了属性ComVisible == true

using System.Runtime.InteropServices;

namespace Controls.Graph.Web
{
    [Guid("5F9F6C6F-016A-4CFF-BD7A-3463761807E1")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface _GraphScript
    {
        [DispId(1)]
        string getGraphXml();
    }

[Guid("35901BC6-EFF1-490C-84FA-786E8462C553")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId(ProgIds.GraphScript)]
public class GraphScript : _GraphScript
{
    protected GraphScript()     
    {
    }

    /// <summary>
    /// 
    /// </summary>
    /// <returns>The graphs xml and javascript</returns>
    public string getGraphXml()
    {
        DisplayDefaults tempDefaults;
        tempDefaults = new DisplayDefaults();

        GraphConstructor graph = new GraphConstructor();
        graph.constructGraph();
        GraphModel completedGraph = graph.Graph;

        return GraphControl.RenderGraph(completedGraph, tempDefaults, 1) + GraphControl.RenderGraphScript();
    }
}
}

和我的进步......

using System;

namespace Controls.Graph.Web
{
    /// <summary>
    /// ProgID Constant
    /// </summary>
    public static class ProgIds
    {
        public const string GraphScript = "GraphData";
    }
}

我不确定我在这里缺少哪一块拼图

编辑:实际上Guid出现在注册表中,但Progid仍然不是。有什么想法/建议吗?

也确保这样做: registered for com interop

1 个答案:

答案 0 :(得分:0)

我弄清楚出了什么问题。我需要将一些访问修饰符更改为PUBLIC - 包括我的GraphScript()构造函数。